确定最低有效位的相等否定

Equality negation to determine Least Significant Bit

基本上,我想检查最后一个有效位是否为 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

我的意思是,显然 4 的 LSB 是 0。 我会说第一个是我需要的...

您需要像这样将 4 & 1 括在括号中

console.log((4 & 1) === 0);

因为如果你不这样做,它会优先考虑 1 === 0,即 false,然后是 4 & false,这与 4 & 0 相同。