代码之家  ›  专栏  ›  技术社区  ›  C. Rib

如何在C中的逐位操作中存储移位位?

  •  1
  • C. Rib  · 技术社区  · 9 年前

    我试图制作一个简单的函数来检查一个整数中有多少位被设置为1。

    我一开始取得的成就是

    #include <stdio.h>
    
    int bitsOne (int x){
        int r=0;
        while (x > 0){
            if (x % 2 == 1) r++;
            x = x/2;
        }
        return r;
    }
    

    我试着使用 >> 运算符,但我不知道如何存储移位的数字。


    使现代化

    利用布里克的建议,我实现了我想要的,

    #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;
    }
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Brick    9 年前

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

    int bit = (x & 1);
    

    然后在x上进行移位。

        2
  •  0
  •   Charlie Martin    9 年前

    >> 是一个像其他任何人一样的操作员。 x = x>>1; 会的,这当然意味着 x>>=1 会的。

    使现代化

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

    别取笑我,我老了。