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

Kir*_*tin 29 javascript java operators

JavaScript代码:

alert( -123456 >>> 0 ); // Prints 4294843840
Run Code Online (Sandbox Code Playgroud)

Java代码:

System.out.println( -123456 >>> 0 ); // Prints -123456
Run Code Online (Sandbox Code Playgroud)

为什么?我已阅读文档,但我没有发现差异.如何将JavaScript代码移植到Java?

Ilu*_*tar 34

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

您看到的值4294843840与位相同-123456,但解释为无符号而不是有符号.

  • 次要的; 它们不是"漂浮的",它们一直是*IEEE-754.这里的问题来自内部的临时转换. (13认同)
  • Java没有未签名的整数.@ kishan-cs示例不是基于运算符的转换,而是操作本身的结果导致值变为正值. (8认同)
  • 所以基本上在java和javascript中,在这个例子中,没有发生'右移'(因为移位是'0'),而是在javascript中,它只是将数字转换为无符号数.这种理解是正确的吗? (2认同)