dur*_*597 -6 java bit-shift long-integer
为什么-1 << 23和-1 << 55在Java中返回相同的值?它似乎应该是非常不同的,因为我正在转移更多的地方!但是,它们会产生相同的值.为什么会这样?
public class BitShifting {
public static void main(String... args) {
long foo = -1 << 23;
long bar = -1 << 55;
System.out.println(foo);
System.out.println(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
-8388608
-8388608
Run Code Online (Sandbox Code Playgroud)
因为1
是一个int
,而不是一个long
,并且转换到long
赋值语句之后才会发生.Java会注意到左手参数是a int
而不是a long
,并且会相应地舍入右手值.
如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到带有掩码值()的按位逻辑AND运算符
&
(第15.22.1节)的影响.实际使用的移位距离因此总是在范围到,包括端值.0x1f
0b11111
0
31
如果左侧参数声明为1L
,则行为将如预期一样,如下所示:
public class BitShifting {
public static void main(String... args) {
long foo = -1L << 23;
long bar = -1L << 55;
System.out.println(foo);
System.out.println(bar);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
-8388608
-36028797018963968
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
157 次 |
最近记录: |