/*
**计算参数的奇偶性,
如果参数中有奇数个1,则返回1;
如果有偶数个1,则返回0
*/
int
odd_even_check(unsigned int x)
{
int val = 0;
/*若是奇数,val的最低位为1,(只看val和x的最低位即可)*/
while (x != 0) {
val ^= x;
x >>= 1;
}
return val & 0x1;
}
val只看最低位,x从低位到高位进行运算,比如
x为1时,循环1次,val的最低位分别为 1
x为11时,循环2次,val的最低位分别为 1,0
x为111时,循环3次,val的最低位分别为 1,0,1
x为101时,循环3次,val的最低位分别为 1,1,0
x为0111时,循环4次,val的最低位分别为 1,0,1,1