命令 << 字节数在 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
++++
移位操作非常快,因为它们通常作为单个机器指令在硬件中实现。
|
也是位级的运算符:按位包含或。
我正在尝试理解 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
++++
移位操作非常快,因为它们通常作为单个机器指令在硬件中实现。
|
也是位级的运算符:按位包含或。