相关疑难解决方法(0)

如何计算32位整数中的设置位数?

代表数字7的8位看起来像这样:

00000111
Run Code Online (Sandbox Code Playgroud)

设置三位.

什么算法来确定32位整数中的设置位数?

algorithm binary bit-manipulation hammingweight iec10967

838
推荐指数
31
解决办法
52万
查看次数

像 GCC __builtin__popcount(int) 一样快地计算整数上的位 1

我编写了一个算法(取自“C 编程语言”),可以非常快速地计算 1 位的数量:

int countBit1Fast(int n)
{
    int c = 0;
    for (; n; ++c)
        n &= n - 1;
    return c;
}
Run Code Online (Sandbox Code Playgroud)

但是一位朋友告诉我,__builtin__popcount(int)这要快得多,但便携性较差。我试了一下,速度快了很多倍!为什么这么快?我想尽可能快地计算位,但不坚持使用特定的编译器。

编辑:我可以在 PIC 微控制器和非英特尔处理器上使用它,所以我需要最大的便携性。

c bit-manipulation built-in

4
推荐指数
1
解决办法
3876
查看次数

如何以另一种形式表示 (x ^ y) & 1?

我试图找到两个整数之间的汉明距离,我得到了它:

int count = 0;
for(int i = 0; i < 32; i++)
{
   if((x ^ y) & 1) 
       count++;
   x >>= 1;
   y >>= 1;
}
Run Code Online (Sandbox Code Playgroud)

但是,它不适用于:

if(x & 1 != y & 1)
Run Code Online (Sandbox Code Playgroud)

当 x = 1 和 y = 4 时,正确的结果是 2。但是,第二个版本输出 1。听起来我需要学习离散逻辑课程。

如何重写第二个 if 语句以使其工作?

c++ bit-manipulation

3
推荐指数
2
解决办法
89
查看次数