关于java:2个箭头和3个箭头的按位移位有什么区别?

what's the difference between bitwise shift with 2 arrows and 3 arrows?

本问题已经有最佳答案,请猛点这里访问。

我以前见过>>>>>。有什么区别,什么时候使用?


其他人也提供了解释。>>>移动所有位,甚至符号位(msb)。>>保持标志位到位,并移动所有其他标志位。这最好用一些示例代码来解释:

1
2
3
4
5
6
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));

输出如下:

1
2
3
4
x >>> 3 = 536870904
x >> 3 = -8
11111111111111111111111111000
11111111111111111111111111111000

双箭头">>"和三箭头">>>"是在32位整数上定义的,因此在变量上执行这些操作将"转换"它们,以便从非数字到数字。此外,javascript数字存储为双精度浮点,因此这些操作还将导致您丢失高于32的任何精度位。">>"维护符号位(结果是有符号整数),而">>>"不维护(结果是无符号整数)。

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

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