深入理解计算机系统 家庭作业 2.65
/*
异或运算可以把同为1时变成0。
*/
#include <stdio.h>
#include <stdlib.h>
int odd_ones(unsigned x);
int main(void)
{
int x=0xF0000001+6;
printf("x的奇数位:%d",odd_ones(x));
return 0;
}
int odd_ones(unsigned x) {
char a[32];
itoa(x,a,2);
printf("x=0x\t\t%32s\n",a);
itoa(x>>16,a,2);
printf("x>>16=0x\t%32s\n",a);
x ^= x >> 16;
itoa(x,a,2);
printf("x^=x>>16=0x\t%32s\n",a);
itoa(x>>8,a,2);
printf("x>>8=0x\t\t%32s\n",a);
x ^= x >> 8;
itoa(x,a,2);
printf("x^=x>>8=0x\t%32s\n",a);
itoa(x>>4,a,2);
printf("x>>4=0x\t\t%32s\n",a);
x ^= x >> 4;
itoa(x,a,2);
printf("x^=x>>4=0x\t%32s\n",a);
itoa(x>>2,a,2);
printf("x>>2=0x\t\t%32s\n",a);
x ^= x >> 2;
itoa(x,a,2);
printf("x^=x>>2=0x\t%32s\n",a);
itoa(x>>1,a,2);
printf("x>>1=0x\t\t%32s\n",a);
x ^= x >> 1;
itoa(x,a,2);
printf("x^=x>>1=0x\t%32s\n",a);
printf("1=0x\t\t%32x\n",1);
return x & 0x1;
}