两个箭头和三个箭头的位移有什么区别?

12

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


使用三个箭头“零填充” - adeneo
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators - adeneo
2个回答

15

其他人已经提供了解释。>>>将所有位数都移动,包括符号位(即最高位)。>>保留符号位并移动其余所有位。下面的示例代码可以更好地解释这一点:

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

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

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

为了更好的解释:https://dev59.com/MXI-5IYBdhLWcg3wf4hD#1822769


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接