Javascript 存在哪些使用案例>&燃气轮机>;=带0的运算符?(无符号右位移位)
我最近遇到了一段奇怪的代码,它使用了Javascript 存在哪些使用案例>&燃气轮机>;=带0的运算符?(无符号右位移位),javascript,bit-shift,Javascript,Bit Shift,我最近遇到了一段奇怪的代码,它使用了>=操作符(我将在后面的问题中展示) 如中所述,>是操作员 将运算符描述为 a>>b将二进制表示法中的a(>=是就地无符号右位移位运算符 这段奇怪的代码 还记得我一开始提到的那段代码吗?这是 (number) => { number >>>= 0; // Do stuff with number... } 我很好奇为什么有人会用0执行在位位移位 用例是什么 寻找用例的尝试 为了回答我的问题,我编写了一个快速脚本,它将
>=
操作符(我将在后面的问题中展示)
如中所述,
>
是操作员
将运算符描述为
a>>b
将二进制表示法中的a
(<32)位向右移位,丢弃移位的位,并从左移位为零
根据这些知识,我假设>>=
是就地无符号右位移位运算符
这段奇怪的代码
还记得我一开始提到的那段代码吗?这是
(number) => {
number >>>= 0;
// Do stuff with number...
}
我很好奇为什么有人会用0
执行在位位移位
用例是什么
寻找用例的尝试
为了回答我的问题,我编写了一个快速脚本,它将遍历所有无符号32位整数,并将该整数与其对应的(无符号右移0)整数进行比较
"use strict";
const assertEqual = (a, b, message) => {
if (a !== b) {
throw message
}
}
const START = 0
const END = Math.pow(2, 32) - 1
for (let n = START; n < END; n++) {
let nShifted = n
nShifted >>>= 0
const message = n + " !== (" + n + " >>>= 0) (which is " + nShifted + ")"
assertEqual(n, nShifted, message)
}
console.log("done.")
- 如注释中所述,对浮点数使用运算符将截断十进制部分并生成整数
x = -1
console.log(x.toString(2)) // '-1'
x >>>= 0
console.log(x.toString(2)) // '11111111111111111111111111111111'
// (Two's complement of -1)
x = 2.6
x >>>= 0
console.log(x) // '2'
总结
就地右移0整数将截断为32位,并使其无符号
还有其他的使用案例吗?试试
x=2.6
,看看能得到什么。@NiettheDarkAbsol它会截断浮点部分。酷,我已经在我的问题中提到了。