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它会截断浮点部分。酷,我已经在我的问题中提到了。