使用按位AND 1

时间:2018-01-04 00:55:13

标签: javascript bit-manipulation

如果x是浮点数,那么

y = x & 1

除了检查x是否为奇数之外还有其他目的吗?

我刚读过Using bitwise OR 0 to floor a number并想知道,还有其他有趣的按位操作吗?

2 个答案:

答案 0 :(得分:2)

您可以使用按位运算符对选项和标志进行编码。

即。编码汽车功能

automaticWindows = 0b1; // 1
manualTransmission = 0b10; // 2
hasAC = 0b100; // 4
hasHeater = 0b1000; // 8

如果我的车有自动窗口和AC,但没有别的,那么我会这样做:

myCarOptions = automaticWindows | hasAC;

然后检查一下随机车是否有AC我可以做:

if (randomCarOption & hasAC) {
  // do something... like turn on AC
}

在一天结束时,按位运算符只允许您使用各种位来执行逻辑,这是计算工作的核心。

答案 1 :(得分:2)

如果x是逻辑浮点(在测试之前不是整数值),& 1只有一个目的:确定x的截断值是否为奇数(这是一个组合截断和按位测试)。这并不是说x是奇数(-2.9既不是奇数也不是偶数,也不是-3.9,并且它们给出相反的结果),而且它不仅仅是截断(因为它会抛弃所有但是一点数据);该测试本质上是两种效果的组合,因此,当x是任意浮点值时,它对其他任何事物都无用。

正如其他答案所述,按位操作还有其他合法用途,例如:加密,或将整数重新用作布尔标志的向量,但这仅与逻辑整数值相关;执行浮点数学,然后在截断后依赖特定的整数值,而不进行舍入,这是一个可怕的想法,当结果最终为X.9999999999999999999999994时,如果你预期它(并且在“小学阶段”下),它会咬你数学,它会是X+1