algorithm - 使用 AND 运算符检查是否设置了某个位

标签 algorithm bit-manipulation

在一些代码示例中,我看到了检查某个位是否已设置的算法,如下所示:

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/

相关文章:

algorithm - 我怎样才能最大程度地划分一组?

java - 如何在 Java 中交换两位整数?

Ruby 按位异或 2 相同长度的 ascii 字符串

php - 将平面数组按键分组为多维数组,如果我们不知道有多少层。 PHP

algorithm - 遗传算法: Roulette wheel selection

java - 从池中选择属性的算法

c - 在 C 中进行位检查的最正确方法

java - 完成包含逗号和点分隔整数的字符串

php - ~ 位运算符(波浪号)的作用是什么

c - 使用少于 5 个按位运算符实现 "logical not"