на этих процессорах, включая x86. На других процессорах нули будут сдвинуты. Стандарт C был гибким, чтобы реализации могли быстро выполнять работу на всех процессорах.
я есть такая тестовая программа:
int main()
{
unsigned n = 32;
printf("ans << 32 = 0x%X\n", (~0x0U) << 32);
printf("ans >> 32 = 0x%X\n", (~0x0U) >> 32);
printf("ans << n(32) = 0x%X\n", (~0x0U) << n);
printf("ans >> n(32) = 0x%X\n", (~0x0U) >> n);
return 0;
}
Он производит следующий вывод:
ans << 32 = 0x0 ... (1)
ans >> 32 = 0x0 ... (2)
ans << n(32) = 0xFFFFFFFF ... (3)
ans >> n(32) = 0xFFFFFFFF ... (4)
Я ожидал, что (1) и (3) будут одинаковыми, а также (2) и (4) будут одинаковыми.
Использование версии gcc: gcc.real (Ubuntu 4.4.1-4ubuntu9) 4.4.1
Что случилось?