Я работаю с gcc 4.4.5 и испытываю некоторые трудности в понимании оператора сдвига вправо для простых простых значений без знака ...
Этот тест
ASSERT_EQ( 0u, (unsigned long)(0xffffffff) >> (4*8) );
пройден.
Этот тест
unsigned long address = 0xffffffff;
ASSERT_EQ( 0u, address >> (4*8) );
не пройден:
Value of: address >> (4*8)
Actual: 4294967295
Expected: 0u
Кажется, что переменная обрабатывается как значение со знаком и, следовательно, приводит к расширению знака.(0xffffffff - это 4294967295 в десятичном виде).Кто-нибудь может заметить разницу?