Посмотрите на этот образец кода C (в качестве примера извлечен тестовый пример):
main() {
unsigned long a, b;
int c;
c = 32;
a = 0xffffffff << 32;
b = 0xffffffff << c;
printf ("a=%x, b=%x\n", a, b);
}
Выводит: a = 0, b = ffffffff
Я не могу понять, почему b не равно нулю, как и a. Я тестировал это на Microsoft C и GCC.
Обновление : Я исправил глупую опечатку (должно было быть << c, а не << b, конечно). Но мой вопрос остается в силе, например, результат тот же.