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

为什么Java中没有无符号的左移位运算符,java,Java,我有以下代码: int a = -1; System.out.println(a<<1); inta=-1; System.out.println(a打印-2的原因不是-1的符号得到保留,而是位置31处移到位置32的位恰好也是1。换句话说,左移1后的符号由第二高位的值确定 -1的二进制表示法在所有位()中都有1s,因此在继续移位数字时,结果保持为负数,直到32次移位后移出最后一个1位 如果你想放弃这个标志,你可以屏蔽结果使其为正 为什么Java中没有无符号的左移位运算符 与右移不同

我有以下代码:

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

System.out.println(a打印
-2
的原因不是
-1
的符号得到保留,而是位置31处移到位置32的位恰好也是
1
。换句话说,左移1后的符号由第二高位的值确定

-1
的二进制表示法在所有位()中都有
1
s,因此在继续移位数字时,结果保持为负数,直到32次移位后移出最后一个
1

如果你想放弃这个标志,你可以屏蔽结果使其为正

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


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

您的实际意思是“为什么没有无符号左移位运算符”?试着想想一个例子,逻辑左移位和算术左移位实际上是不同的。它不会“保留”"符号位,它只是-1的二进制表示的一个产物。这些人提出了一个非常清楚和合理的问题,这真是太差劲了。这里有一些隧道式的观点。可能重复Java不支持的原因也让他知道原因:谢谢,@dasblinkenlight,我应该记住2的补码表示。我没有思考直。“直到32次移位后移出最后1位。”仅在
-1
的情况下,
-1 Integer.MAX\u值或x>
可以更改符号,
不能更改符号,