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

时间:2014-03-10 17:34:56

标签: java javascript bit-manipulation bit-shift

之前我见过>>>>>有什么区别以及何时使用它们?

2 个答案:

答案 0 :(得分:6)

其他人提供了解释。 >>>移位所有位,甚至是符号位(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

答案 1 :(得分:3)

Double Arrows">>"和三箭">>>"是在32位整数上定义的,因此在变量上执行这些操作将"转换"他们可以从非数字到数字说话。此外,javascript数字存储为双精度浮点数,因此这些操作也会导致丢失高于32的任何精度位。 ">>"保持符号位(结果是有符号整数),而">>>"不(结果是无符号整数)。

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

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