命令 << 字节数在 java

command << with bytes in java

我正在尝试理解 java 中的命令 "someByte << 2"。它是为了什么?在 iSCSI 文档中,有一个缓存模式页面说明 DEMAND READ RETENTION PRIORITY 和 WRITE RETENTION PRIORIRY。

在源代码中有这些消息的代码:

// serialize byte 3
b = (byte)((demandReadRetentionPriority << 4) | writeRetentionPriority);
buffer.put(b);

为什么他们将“<< 4”命令与 demandReadRetentionPriority 一起使用,而不是与 writeRetentionPriority 一起使用?在那种情况下 << 是什么意思?

谢谢。

从文档中可以看出,demandReadRetentionPriority存放在字节的高4位(bits 7,6,5,4),writeRetentionPriority存放在低4位字节的位(3、2、1 和 0)。

您提供的代码只是将 demandReadRetentionPriority 变量中存储的值移至高 4 位。 << 是位移操作。

例如,如果 demandReadRetentionPriority 的值为 1,那么它将被移动 4 位并且该字节将具有如下二进制表示:

00010000

并且为了将 b 的低位之一设置为 1,writeRetentionPolicy 中的相应位将 也必须 设置为 1,因为 demandReadRetentionPolicy 的低 4 位在移位后将为 0。

<<是"Signed left shift"运算符,一个位移运算符。

示例:

您已经存储了 279 的十进制数 100010111。当您向左移动 4 步时,您会得到 1000101110000 (2224),因为它将 "move" 十进制数向左移动并用零填充空格。

   100010111 << 4
=> 1000101110000
            ++++ 

移位操作非常快,因为它们通常作为单个机器指令在硬件中实现。

|也是位级的运算符:按位包含或。

Summary of operators in java