添加到Uint32Array时,0x100000000 >>> 0在Javascript中实际上是做什么的

时间:2019-06-26 06:11:25

标签: javascript hex bit-manipulation

我最近问了关于堆栈溢出的第一个问题(请参阅)For loop inside another for loop crashes in Javascript 并给出了一个似乎可行的出色答案(感谢Ry-),但是我一直在研究代码以弄清其原因/工作方式,并对以下语句“ 0x100000000 >>> 0”感到困惑

我的理解(如几天前所了解的)是按位字符>>>通过从左侧按零向右移动,最右边的位落下。因此,“ >>> 0”对方程式没有影响吗?

但是,当我按位删除代码时,该代码不起作用吗?有人可以解释为什么吗?

const world = document.getElementById('canvas');
const context = world.getContext('2d');

const start = performance.now();

const {width, height} = world;
const random32 = new Uint32Array(width * height);

for (let i = 0; i < random32.length; i++) {

    //THIS IS THE LINE I AM CONFUSED ABOUT
    random32[i] = Math.random() * 0x100000000 >>> 0;

}

我尝试删除“ >>> 0”,但是如果没有它,代码将无法工作。

我一直在尝试学习更多有关按位字符和Uint32Arrays的信息,但没有找到任何解释它的信息。

1 个答案:

答案 0 :(得分:0)

JavaScript不能区分浮点数和整数。但是,某些操作可以。 >>>是这样的操作。 Math.random() * 0x100000000将是介于0和0x100000000之间的浮点数。但是,>>>强制将其转换为正整数,因为>>>仅对整数进行运算。然后它将那个整数移位0位,这实际上什么也没做。

tl; dr:非负数上的x >>> 0x|0Math.floor(x)相同。