gpt4 book ai didi

c - 按位运算,与 "The C programming Language"中使用的表达式混淆(书籍)

转载 作者:行者123 更新时间:2023-12-04 09:18:09 25 4
gpt4 key购买 nike

在我正在阅读的“The C programming language”这本书的第 2 章中。
这本书解释了按位运算,它有一个函数显示一个整数有多少位。
下面是函数...

int Bitcount(unsigned x){

int b;
for(b = 0; x != 0; x >>=1){
if(x & 01){
b++
}
}
return b;
}

然后给我们一个练习来说明这一点。
“在二进制补码系统中,x &= (x-1) 删除 x 中最右边的 1 位;解释为什么。使用此观察来编写更快版本的 Bitcount”。

问题是我真的无法理解“x &= (x-1)”是如何工作的?谁可以给我解释一下这个?或者将我发送到可以更好地帮助我理解的资源?我一直在努力解决这个问题,但我真的做不到。

感谢您提供的任何帮助。
另外,如果我的问题有任何问题,这是我的第一篇文章,所以请帮助我改进我的问题。

最佳答案

X 和 X-1 不能都将其最右边的位设置为 1,因为在二进制系统中,以 0 和 1 结尾的数字交替出现 - 因此 X & (X-1) 保证是一个最右边的位设置为0 as AND 只有在两项都为真时才计算为真。也许混淆源于 Andrew W 所说的,这里使用了按位与(每个位单独与)?

编辑:现在,正如 Inspired 指出的那样,这只是答案的一部分,因为原始问题指定最右边的 1 位将被重置。由于 Andrew W 已经详细回答了正确的版本,我不会在这里重复他的解释,但我会引用他的回答。

关于c - 按位运算,与 "The C programming Language"中使用的表达式混淆(书籍),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17238457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com