首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

想不明白,哪位高手来通俗易懂的讲下咋

2012-05-27 
想不明白,谁来通俗易懂的讲下咋C/C++ codeint fun_a(unsigned x){int val 0while (x){val ^ xx 1

想不明白,谁来通俗易懂的讲下咋

C/C++ code
int fun_a(unsigned x){    int val = 0;    while (x){        val ^= x;        x >>= 1;    }    return val & 0x1;}

函数作用是返回变量x 位序列中1数量的奇偶,奇数个1为1,偶数个1为0
想不明白。。。求大大解释下

[解决办法]
C/C++ code
/*    测试程序*/#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    你明白了吗?            */
[解决办法]
探讨
C/C++ code
int fun_a(unsigned x)
{
int val = 0;
while (x){
val ^= x;
x >>= 1;
}
return val &amp; 0x1;
}


函数作用是返回变量x 位序列中1数量的奇偶,奇数个1为1,偶数个1为0
想不明白。。。求大大解释下

热点排行