想不明白,谁来通俗易懂的讲下咋
int fun_a(unsigned x){ int val = 0; while (x){ val ^= x; x >>= 1; } return val & 0x1;}
/* 测试程序*/#include<stdio.h>#include<stdlib.h>int main(void){ unsigned num; int result; int fun_a(unsigned x); printf("请输入要判断的数字:"); scanf_s("%d",&num); result = fun_a(num); if(result==1){ printf("你要判断的数字有奇数个1\n"); } else if (result==0){ printf("你要判断的数字有偶数个1\n"); } else printf("Error!"); system("pause"); return 0;}int fun_a(unsigned x) { int val = 0; while (x){ val ^= x; x >>= 1; //循环次数是二进制的位数 } return val & 0x1;}/* 假设我们输入的是23(10111),有5位数,共需异或五次。 事实上是变量val=0跟10111每一位上的二进制数进行异或。 0^1=1 1^1=0 1^0=1 从上三式可以看出0跟偶数个1异或则为0,跟奇数个1异或则为1 最后一个位与是判断5次异或之后的val的最低位是0还是1 你明白了吗? */
[解决办法]