为什么带有 XOR 的翻转所有位会像 OR 一样打印?

发布于 2024-12-11 05:28:32 字数 420 浏览 0 评论 0原文

这里我尝试实现 XOR (^) 来翻转数字中的所有位。但由于某种原因,它打印出全 1,就好像 XOR (^) 实际上是 OR (|)。我似乎无法理解为什么。我查看了运算符优先级,但我不知道这会如何真正产生影响。

#include <stdio.h>
#include <stdlib.h>

void flipallbits(int x) {
  int i;
  for( i = 31; i >= 0; i--) {
    if( x ^ 1 << i ) {
      printf("1");
    } else {
      printf("0");
    }
  }
  printf("\n");
}

int main() {
  int num = 6541;
  flipallbits(num);
}

Here I am trying to implement the XOR (^) to flip all the bits in the number. But for some reason, it prints out all 1's as if the XOR (^) was in fact an OR (|). I can't seem to understand why. I took a look at operator precedence but I don't see how that would really make a difference here.

#include <stdio.h>
#include <stdlib.h>

void flipallbits(int x) {
  int i;
  for( i = 31; i >= 0; i--) {
    if( x ^ 1 << i ) {
      printf("1");
    } else {
      printf("0");
    }
  }
  printf("\n");
}

int main() {
  int num = 6541;
  flipallbits(num);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薄荷梦 2024-12-18 05:28:32
x ^= ~0; // too short to be submitted 
x ^= ~0; // too short to be submitted 
等往事风中吹 2024-12-18 05:28:32

x ^ 1 << ix ^ (1 << i) 相同。因此,在循环的每次迭代中,您都会翻转不同的位。但您的测试只是检查结果是否非零;这始终是正确的,因为您的输入值设置了多个位。

目前尚不清楚您想要实现什么目标。如果您只想依次打印所有位,则需要 x & 1<<;我。

x ^ 1 << i is the same as x ^ (1 << i). So on each iteration of your loop, you're flipping a different bit. But your test is simply checking that the result is non-zero; this is always true, because your input value has more than one bit set.

It's not clear what you're trying to achieve. If you simply want to print all the bits in turn, you want x & 1 << i.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文