组合位时在移位期间包含 OR 会发生什么

What is happening with inclusive OR during a shift when combining bits

我知道这是一个初学者问题:这可能是我不了解计算机体系结构或寄存器的问题,但是当您移位然后使用 | 时会发生什么? (包含或)运算符?我知道使用 OR 可以打开位;

但以下内容让我感到困惑 'bit';例如,我看到通过

将 Big endian 数据转换为 Little endian 的代码
int value = (buffer[i++] << 24) | (buffer[i++] << 16)
          | (buffer[i++] << 8) | buffer[i++]; 

在我自己的代码中,我通过以下方式转换了字节流:

short a = (short)(buffter[0] | (buffer[1] << 8));

但是这些OR对我来说没有意义,OR不是用来开启位的吗?

       0101
       1100
Result:1101

如果我真的按照我理解的方式使用 OR,那么如果 byte[i] = 2 并且 byte[i+1] =3,那么

0010 | 0011 = 0011 = 3.

在进行包含性或运算之前,移位是否使字节中的数据溢出到内存中更宽的位置? IE。 0010 | 0011 << 4 等同于 00000010 | 00110000? 如果是这种情况,那么由于您不能永远填充 0,那么偏移有多大才算太大?

您对按位或运算原理的理解是正确的。如果设置了任一对应位,则设置结果位。

当您执行移位时,这些位会移动。所以二进制值 0011 左移 4 位得到 00110000。如果你然后用 0010 或你得到:

  00000010
| 00110000
  --------
  00110010

至于偏移多大就太大了,这完全取决于类型。