2个箭头和3个箭头的按位移位有什么区别? [重复]

问题描述 投票:0回答:2

我以前见过

>>
>>>
各自有什么区别以及何时使用?

java javascript bit-manipulation bit-shift
2个回答
15
投票

其他人已经提供了解释。

  • >>>
    移位所有位,甚至符号位(MSB)
  • >>
    保持符号位不变并移动所有其他位

最好用一些示例代码来解释这一点:

int x=-64;

System.out.println("x >>> 3 = "  + (x >>> 3));
System.out.println("x >> 3 = "  + (x >> 3));
System.out.println(Integer.toBinaryString(x >>> 3));
System.out.println(Integer.toBinaryString(x >> 3));

输出如下:

x >>> 3 = 536870904
x >> 3 = -8
11111111111111111111111111000
11111111111111111111111111111000

5
投票

双箭头“>>”和三箭头“>>>”是在 32 位整数上定义的,因此对变量执行这些操作会将它们从非数字“转换”为数字。此外,JavaScript 数字存储为双精度浮点数,因此这些操作也会导致您丢失任何高于 32 的精度位。 “>>”保留符号位(结果是有符号整数),而“>>>”则不保留符号位(结果是无符号整数)。

http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx

为了更好的解释:https://stackoverflow.com/a/1822769/780399

© www.soinside.com 2019 - 2024. All rights reserved.