В приведенном ниже коде указана маскировка, необходимая для назначения.
unsigned int x = 0x01020304;
unsigned char a1, a2, a3, a4;
a1 = (x >> 24) & 0xff;
a2 = (x >> 16) & 0xff;
a3 = (x >> 8) & 0xff;
a4 = x & 0xff ;
Я понимаю, что без него все работает хорошо, но я нахожу такие назначения во всем стандартном / проверенном коде ... разве это не пустая трата времени ??
Спасибо за ваши ответы на приведенный выше код. Похоже, что компилятор проигнорировал (оптимизировал) маскирование, как видно из приведенного ниже objdump.
a1 = (x >> 24) & 0xff;
804838b: 8b 45 fc mov 0xfffffffc(%ebp),%eax
804838e: c1 e8 18 shr $0x18,%eax
8048391: 88 45 fb mov %al,0xfffffffb(%ebp)