x
是逻辑上的浮点数(在测试之前不打算成为整数值),& 1
的唯一目的是确定截断值是否为奇数(它是一个组合的截断和按位测试)。它并没有说 x
是否为奇数(-2.9
既不是奇数也不是偶数,-3.9
也不是,而且它们给出相反的结果),它也不仅仅是截断(因为它抛弃了除一个数据位以外的所有数据位);测试本质上结合了两种效果,并且在 x
是任意浮点数值时没有其他用处。X.9999999999999999999999994
而你期望它是(根据“小学”数学,它应该是)X+1
时,它会让你措手不及。automaticWindows = 0b1; // 1
manualTransmission = 0b10; // 2
hasAC = 0b100; // 4
hasHeater = 0b1000; // 8
myCarOptions = automaticWindows | hasAC;
那要判断某辆随机的汽车是否有空调,我可以这样做:
if (randomCarOption & hasAC) {
// do something... like turn on AC
}
归根结底,位运算符只是让您可以使用各种位进行逻辑操作,这是计算机工作的核心。
x
是一个逻辑浮点数。你不会使用逻辑浮点数来存储标志。这是按位与的合理用法,但在这种情况下,值始终是逻辑整数或标志是无意义的。 - ShadowRanger