小编Bra*_*dos的帖子

K&R C 编程语言练习 2-9

我不明白 K&R C 编程语言第 2 章 2.10 中的练习 2-9:

练习2-9。在二进制补码系统中, x &= (x-1) 删除 x 中最右边的 1 位。解释为什么。使用此观察结果编写更快版本的 bitcount 。

位计数函数为:

/* bitcount: count 1 bits in x */

int bitcount(unsigned x)
{
    int b;
    for (b = 0; x != 0; x >>= 1)
        if (x & 01)
            b++;
    return b;
}
Run Code Online (Sandbox Code Playgroud)

该函数在检查最右边的位是否为 bit-1 后将其删除,然后弹出最后一位。

我不明白为什么x&(x-1)要删除最右边的1位?例如,假设 x 是1010且 x-1 是1001二进制的,并且x&(x-1)1011,所以最右边的位将在那里并且将是 1,我哪里错了?

另外,练习中提到了补码,这和这个问题有关系吗?

多谢!!!

c

2
推荐指数
1
解决办法
1258
查看次数

标签 统计

c ×1