有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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(最低有效位)打包成一个整数,然后返回结果