运营商>>>之间有什么区别?用Java和JavaScript?

时间:2016-12-06 11:54:31

标签: javascript java operators

JavaScript代码:

alert( -123456 >>> 0 ); // Prints 4294843840

Java代码:

System.out.println( -123456 >>> 0 ); // Prints -123456

为什么呢?我已经阅读了文档,但我没有找到差异。如何将JavaScript代码移植到Java?

1 个答案:

答案 0 :(得分:34)

两者都是合乎逻辑的右移,但JavaScript在如何处理数字方面有一些奇怪之处。通常,JavaScript中的数字是浮点数,但按位运算将它们转换为无符号的32位整数。因此,即使该值看起来不应该更改,它也会将数字转换为32位无符号整数。

您看到4294843840的值与-123456的位数相同,但解释为无符号而非签名。