我最近问了关于堆栈溢出的第一个问题(请参阅)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的信息,但没有找到任何解释它的信息。
答案 0 :(得分:0)
JavaScript不能区分浮点数和整数。但是,某些操作可以。 >>>
是这样的操作。 Math.random() * 0x100000000
将是介于0和0x100000000之间的浮点数。但是,>>>
强制将其转换为正整数,因为>>>
仅对整数进行运算。然后它将那个整数移位0位,这实际上什么也没做。
tl; dr:非负数上的x >>> 0
与x|0
和Math.floor(x)
相同。