基本上,我想检查最后一位有效位是否为0。我已经有了一个条件来测试位是否设置(或者至少,我相信是这样):
cells[x + y * cols] & 1 === 1
在某些时候,我需要这个的否定,所以我想:
cells[x + y * cols] & 1 === 0
但是我没有得到预期的结果。所以我输入:
(!cells[x + y * cols] & 1 === 1)
根据预期结果,这似乎更合适。实际上,两种情况下我都没有得到预期的结果。也许问题来自其他地方,或者我只是误解了按位操作符的使用。
那么首先,为什么这些行是不同的:
console.log(!(4 & 1 === 1)); // true
console.log(4 & 1 === 0); // 0
我的意思是,显然LSB(4)是0。我想说第一个是我需要的…
您需要像这样将4 & 1
包装到括号中
console.log((4 & 1) === 0);
因为如果你不这样做,它会优先考虑1 === 0
,即false
,然后是4 & false
,即4 & 0
。