为什么在反转字节时会有不必要的 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

在最新的标准 (C++20) 中,他们也添加了旋转:参见 rotr and rotl