java左/右位移位为什么按字节长度移位
我一直在读这个关于网络包中位操作的博客。我有这段代码,我看到它的读数是一个整数,通常是4字节长(32位)
public int readInt() {
return (pData[caret++] & 0xff) << 24 | (pData[caret++] & 0xff) << 16
| (pData[caret++] & 0xff) << 8 | pData[caret++] & 0xff;
}
为什么我们在读取整数值时移动8、16和24?目标是什么?它实现了什么
# 1 楼答案
这是因为pData是一个字节数组。readInt()的作用是将4个字节打包成一个整数,然后返回结果。因为整数是4字节,所以将为第一个插槽设置by
((value & 0xFF) << 24)
,为第二个插槽设置by((value & 0xFF) << 16)
,为第三个插槽设置by((value & 0xFF) << 8)
,为最后一个插槽设置by(value & 0xFF)
。要将这四个值合并为一个值(在本例中为整数),必须在每个值之间执行按位OR(|
)。如果pData确实是一个整数数组,那可能是因为它想要使用无符号整数(0-255)。因此readInt()的作用是将每个int(最多4个整数)的8个LSB(最低有效位)打包成一个整数,然后返回结果