Здесь я пытаюсь реализовать 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);
}