相关疑难解决方法(0)

为什么Java掩码移位操作数为0x1F?

在Java中:

(0xFFFFFFFF <<  1) = 0xFFFFFFFE = 0b1111111111111110
                :         :               :
(0xFFFFFFFF << 30) = 0xE0000000 = 0b1110000000000000
(0xFFFFFFFF << 30) = 0xC0000000 = 0b1100000000000000
(0xFFFFFFFF << 31) = 0x80000000 = 0b1000000000000000
Run Code Online (Sandbox Code Playgroud)

然而:

(0xFFFFFFFF << 32) = 0xFFFFFFFF = 0b1111111111111111
Run Code Online (Sandbox Code Playgroud)

逻辑上这没有任何意义,但我认为发生的事情是Java执行类似于以下操作的操作:

a << (b % Integer.SIZE) [编辑,显然:] a << (b & 0x1F)

这也适用于>>>>>,太.

显然,移位> = 32(在整数的情况下)会从数据类型中删除所有数据,但有时这很有用.例如:

int value = 0x3F43F466; // any value
int shift = 17; // any value >= 0
int carry = value …
Run Code Online (Sandbox Code Playgroud)

java bit-manipulation

11
推荐指数
1
解决办法
2709
查看次数

标签 统计

bit-manipulation ×1

java ×1