在一些代码示例中,我看到了检查某个位是否已设置的算法,如下所示:
for (int i = 0; i < 32; i++)
{
// count number of elements with i'th bit set
int count = 0;
for (int j = 0; j < n; j++)
if ( (arr[j] & (1 << i)) ) // array holds integers
count++;
if 语句检查数组中的当前数字是否打开了第 i 个位。例如,如果数组当前索引中的数字为4(4位表示为0100),i为2(对应第3位),则AND运算为
0100
0100 &
= 0100
它返回 4。既然 if 语句检查真值(值为 1 或 0),那么对于刚刚描述的情况,它如何解释 AND 运算为真?
最佳答案
如果此示例可以编译,则您很可能使用 C、C++ 或 Objective-C(与此示例无法编译的 Java 或 C# 相反)。
C 和 C++ 都有一条规则,在需要逻辑表达式的上下文中,将零解释为 false
,将 所有 非零解释为 true
.想象一下,在需要逻辑表达式的上下文中,隐式 != 0
附加到数值表达式。
if
语句需要逻辑表达式,因此任何非零值都被视为 true
。这就是此实现有效的原因。
关于algorithm - 使用 AND 运算符检查是否设置了某个位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282446/