为什么在反转字节时会有不必要的 or 操作?
Why is there an unnecessary or operation when inverting bytes?
我真的很困惑,不管它多么微不足道。
这是一个例子(我在纸上试过):
uint16_t val = 32; //00000000 00100000
uint16_t swapped = val >> 8; //00100000 00000000
uint16_t swapped2 = val << 8; //00100000 00000000
uint16_t swapped3 = (val >> 8) | (val << 8); //00100000 00000000
我可能遗漏了一些东西...但据我所知,它们都具有相同的值,我想知道“swapped3”中的操作可能是 safeguard/good 对无符号 32 位值,但没有意义。
我尝试在网上搜索答案,但所有操作都是这个或它的游戏。
开导一下,如果可能的话,二元运算让我头晕目眩。
正如许多人在评论中已经指出的那样,>>
和 <<
操作是按位移位,而不是按位旋转。参见 https://en.cppreference.com/w/cpp/language/operator_arithmetic。
我真的很困惑,不管它多么微不足道。 这是一个例子(我在纸上试过):
uint16_t val = 32; //00000000 00100000
uint16_t swapped = val >> 8; //00100000 00000000
uint16_t swapped2 = val << 8; //00100000 00000000
uint16_t swapped3 = (val >> 8) | (val << 8); //00100000 00000000
我可能遗漏了一些东西...但据我所知,它们都具有相同的值,我想知道“swapped3”中的操作可能是 safeguard/good 对无符号 32 位值,但没有意义。
我尝试在网上搜索答案,但所有操作都是这个或它的游戏。
开导一下,如果可能的话,二元运算让我头晕目眩。
正如许多人在评论中已经指出的那样,>>
和 <<
操作是按位移位,而不是按位旋转。参见 https://en.cppreference.com/w/cpp/language/operator_arithmetic。