为什么Java中没有无符号左移运算符

时间:2014-10-01 22:20:47

标签: java

我有以下代码:

int a = -1;
System.out.println(a<<1);

这打印-2。这意味着保留了符号位。 Java中没有未签名的左移运算符。我的问题是,如果你想推出符号位,如果你使用int来存储一个值,但是包含一个代表某些东西的位模式呢?

1 个答案:

答案 0 :(得分:8)

打印-2的原因不是保留-1的符号,而是位置31的位移到位置32的位也恰好是1。换句话说,左移一个符号后的符号由第二个最高位的值确定。

-1的二进制表示在所有位(an explanation can be found here)中都有1 s,所以当你继续移动数字时结果仍为负数,直到你移出最后一个{{1} 32班后的位。

如果您想放弃标志,可以屏蔽结果以使其成为正面。

  

为什么Java中没有无符号左移运算符

与向右移位不同,当移位运算符需要决定什么转移到最高有效位的空出位置时,向左移位的值确定新符号位的值。新的零位转移到最低位,没有任何特殊含义。