我知道这是一个初学者的问题:这可能是我对计算机体系结构或寄存器不了解的东西,但是当你移位然后使用 | 时会发生什么 (包括 OR)运算符?我知道使用 OR 可以打开位;
但以下内容让我“有点”困惑;例如,我已经看到将 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。
在执行包含 OR 之前,是否使字节中的数据溢出到内存中更宽的位置?即
0010 | 0011 << 4相当于00000010 | 00110000?如果是这种情况,那么由于您不能永远填充 0,因此偏移量有多大?