带 2 个箭头和 3 个箭头的按位移位有啥区别? [复制]
Posted
技术标签:
【中文标题】带 2 个箭头和 3 个箭头的按位移位有啥区别? [复制]【英文标题】:what's the difference between bitwise shift with 2 arrows and 3 arrows? [duplicate]带 2 个箭头和 3 个箭头的按位移位有什么区别? [复制] 【发布时间】:2014-04-13 23:23:33 【问题描述】:我以前见过>>
和>>>
。 有什么区别以及何时使用?
【问题讨论】:
使用三个箭头“零填充” developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 【参考方案1】:其他人已经提供了解释。 >>> 移动所有位,甚至符号位(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
【讨论】:
【参考方案2】:双箭头“>>”和三箭头“>>>”是在 32 位整数上定义的,因此对变量执行这些操作会将它们从非数字“转换”为数字。此外,javascript 数字存储为双精度浮点数,因此这些操作也会导致您丢失任何高于 32 的精度位。 ">>" 保留符号位(结果是有符号整数),而 >>>" 不保留(结果是无符号整数)。
http://msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx
为了更好的解释:https://***.com/a/1822769/780399
【讨论】:
以上是关于带 2 个箭头和 3 个箭头的按位移位有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章