Невозможно понять поведение оператора сдвига в коде C

Посмотрите на этот образец кода 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, конечно). Но мой вопрос остается в силе, например, результат тот же.

5
задан haimg 30 January 2012 в 21:07
поделиться