gpt4 book ai didi

c - “binary and” 运算符如何在 while 循环中工作?

转载 作者:行者123 更新时间:2023-11-30 18:38:51 25 4
gpt4 key购买 nike

这是一个输出为 7 的小程序(我认为输出是 6,因为使用二进制系统 126 & 127 = 6):

int main() {
int x = 127, count = 0;

while(x) {
x &= (x - 1);
count++;
}

printf("%d", count);
}

我不明白为什么 6 加上 1 (1 + 6 = 7)。

最佳答案

您在解释中混合了变量。这里发生的情况是,变量 count 将递增(原始值为零),而 x 的值为零。同时,当x的值不为零时,xx-1的按位与被赋值为x

最后,打印的结果不是x,而是count

并且,根据我的 Python 解释器,此代码的逻辑以 x 值为 0 结束,而 count 变为 7 ,因此 x 在变为零之前与它的前身进行了 AND 赋值 7 次。

这就是扩展了 while 循环的伪代码中发生的情况:

x = 127;
c = 0;

x != 0 thus {
x = x & x - 1 thus x == 127 & 126 thus x == 126;
count += 1 thus count == 1;
}

x != 0 thus {
x = x & x - 1 thus x == 126 & 125 thus x == 124;
count += 1 thus count == 2;
}

x != 0 thus {
x = x & x - 1 thus x == 124 & 123 thus x == 120;
count += 1 thus count == 3;
}

x != 0 thus {
x = x & x - 1 thus x == 120 & 119 thus x == 112;
count += 1 thus count == 4;
}

x != 0 thus {
x = x & x - 1 thus x == 112 & 111 thus x == 96;
count += 1 thus count == 5;
}

x != 0 thus {
x = x & x - 1 thus x == 96 & 95 thus x == 64;
count += 1 thus count == 6;
}

x != 0 thus {
x = x & x - 1 thus x == 64 & 63 thus x == 0;
count += 1 thus count == 7;
}

x == 0, thus {
count == 7, thus print(count) outputs "7";
}

顺便说一句,126 & 127 == 0b1111110 & 0b1111111 == 0b1111110 == 126

关于c - “binary and” 运算符如何在 while 循环中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32278868/

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