如何将移位后的位存储在 C 中的按位运算中?

How do I store the shifted bit in a bitwise operation in C?

我试图创建一个简单的函数来检查一个 int 中有多少位设置为 1。

我最初的成就是

#include <stdio.h>

int bitsOne (int x){
    int r=0;
    while (x > 0){
        if (x % 2 == 1) r++;
        x = x/2;
    }
    return r;
}

我试图使用 >> 运算符来代替,但我不知道如何存储移位后的数字。


更新

根据 Brick 的建议,我实现了我想要的,

#include <stdio.h>

int bitsOne (int x){
    int r=0;
    int bit;
    while (x > 0){
        bit = (x & 1);
        if (bit == 1) r++;
        x>>=1;
    }
    return r;
}

在使用掩码进行移位之前获取最后一个槽中的位:

int bit = (x & 1);

然后在 x 上进行移位。

>> 和其他运算符一样。 x = x>>1; 会做到,这当然意味着 x>>=1 会做到。

更新

如果你想除以 2,你确实应该移动 1。

别笑话我,我老了