dha*_*ram 4 java bit-manipulation bit-shift bit
我对这里的表达很困惑.我是一名Java程序员,但我并不精通位操作.
我想我理解正确如下:
Input : 1 << 10
Output: 0000000000000000000010000000000
Run Code Online (Sandbox Code Playgroud)
对于正数,我认为你是1乘10位.
混淆是我有以下情况:
int val = -10 (binary representation : 1111111111111111111111111110110 )
Input : 1 << val
Output: 0000000010000000000000000000000
Run Code Online (Sandbox Code Playgroud)
如果有人可以通过负数向我解释左移或右移的含义,那将是非常好的.
<<(和其他移位运算符)只需要其右操作数的5个最低有效位int,而6则用于long,因为移位int超过31 是没有意义的.
在你的情况下它是0b10110= 22.
因此1 << (-10)相当于1 << 22.
从JLS,第15.19节:
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符&(§15.22.1)和掩码值0x1f(0b11111)的影响.因此,实际使用的移位距离始终在0到31的范围内,包括0和31.
换一种说法,
1 << -10
Run Code Online (Sandbox Code Playgroud)
相当于:
1 << (-10 & 0x1f)
Run Code Online (Sandbox Code Playgroud)
......是的
1 << 22
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
620 次 |
| 最近记录: |