按位 & (and) 和 | (或)对整数值内的所有位进行操作。它独立地对每个位进行操作,并且通常与您一起使用一组布尔真值(又名标志)来指示各种对象的状态。它也可以用于(如您的示例中)或测试特定标志而不修改其他标志。
整数中的位表示两个值的幂。如果该位设置为真,则其值中包含 2 的幂。如果该位为假,则不包括在内。最低有效位 b0 代表 2^0,位 1 代表 2^1,依此类推。
例如,二进制值 5 = 101 因为 5 = 2^2 + 2^0 = 4 + 1 = 5
如果任一操作数在该位置包含 1,则按位或将结果中的位设置为 1。当且仅当两个操作数在该位置都有 1 时,按位与将每个位设置为 1。
例如:
Bitwise OR: 5 | 9 = 0101 | 1001 = 1101
Bitwise AND: 5 & 9 = 0101 & 1001 = 0001
使用这些运算符,如果 cubeindex 中的一组位值表示一组状态(真或假值),那么您可以使用相同的按位操作数来测试特定状态是否为真,而忽略其他位。
在您的示例中:
cubeindex |= 1
将 cubeindex 中的最低有效位设置为 true (1),无论它之前是什么。这是因为任何位值与 0 的按位或是相同的位值,而任何位值 1 的按位或始终为 1,因此无论其先前状态如何,都与将该位设置为 1 相同。它相当于:
立方体索引 = 立方体索引 | 000000000000000001 = b0 设置为 1 的立方体索引
逻辑与用于测试 edgeTable[cubeindex] 的最低有效位是否等于 1。仅当该值的 b0 为 1 时,条件才成立。为什么?因为其他位无关紧要,因为它们是按位与零,始终为零。
edgeTable[cubeindex] & 1 = 位 0 的值