这里我试图实现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);
}
答案 0 :(得分:3)
x ^= ~0; // too short to be submitted
答案 1 :(得分:1)
x ^ 1 << i
与x ^ (1 << i)
相同。因此,在循环的每次迭代中,您都会翻转不同的位。但是你的测试只是检查结果是否为零;这总是正确的,因为您的输入值设置了多个位。
目前尚不清楚你想要实现的目标。如果您只想依次打印所有位,则需要x & 1 << i
。