C#: Чему равно A?

Вопрос из серии code puzzles. Возможно, не очень вписывается в тематику раздела Q&A, но до топика не дотягивает.


Итак, кто-нибудь сможет, не компилируя данный код, сказать, чему будет равно значение переменной A?

int A = 1 << 32;


P.S. вопрос с подвохом =)
  • Вопрос задан
  • 3631 просмотр
Решения вопроса 1
xRay
@xRay
code puzzles

Да причем изначально на Java http://stackoverflow.com/questions/702607/in-java-when-using-bitshifts-why-does-1-32-1-31-1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 8
sl_bug
@sl_bug
Интересно будет узнать ответ (и объяснение), если A <> 1 :) Во всяком случае для незнающих C#
Ответ написан
Комментировать
Согласно спецификации C#:

The high-order bits outside the range of the result type of x are discarded, the remaining bits are shifted left, and the low-order empty bit positions are set to zero.

Кажется ответ должен быть 0.
Ответ написан
xappymah
@xappymah
Если здесь A != 0, то тогда я лучше не буду изучать C# :)
Ответ написан
burdakovd
@burdakovd
Не C#, но в C++ похожие фокусы:
#include <cstdio>
#include <cmath>

int main() {
        int i = 1, j = 32;
        printf("%d %d %d %d\n", 1<<32, 1<<j, i<<32, i<<j);
}



burdakovd@vds0 ~ % ./test
0 1 1 1

Ответ написан
S_talker
@S_talker
Как не выдержавший и все-таки скомпилировавший код, могу сказать, что результаты
int A = 1 << 32;
и
int A = 1;
A = A << 32;

различаются.
Ответ написан
@Monca
C# не знаю, но должен быть ответ 0
Ответ написан
sl_bug
@sl_bug
Проверил на Mono ради интереса. Все таки 1.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы