如果x是浮点数,那么
y = x & 1
除了检查x是否为奇数之外还有其他目的吗?
我刚读过Using bitwise OR 0 to floor a number并想知道,还有其他有趣的按位操作吗?
答案 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
。