随笔

while(a)         表示当a!=0时执行循环,其等价于while(a!=0)。if(a) 同上。while(!a) 表示当a=0时执行循环,其等价于while(a==0)。if(!a) 同上。if(j%2)continue;  表示j%2!=0时执行continue;j%2!=0表示j除以2的余数不为零,即除不尽。即j为奇数时执行continue;

异或运算  a^b就是a和b二进制中同一位是否相同,相同为一;

a&1为判断a的二进制码中是否为1;

a=a>>1  二进制向右移动一位

 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n,i,a,b;
 5     scanf("%d",&n);
 6     for(i=1;i<=n;i++)
 7     {
 8         scanf("%d%d",&a,&b);
 9         a^=b;   //a,b的异或运算,把运算结果储存在a中;
10         b=0;    //把b重置为0,用于计数;
11         while(a)
12         {
13             if(a&1)   //二进制a于(二进制)...00001的且运算,同1为1,其余为0;即异或运算后的结果最后一位为1时计数+1
14                 b++;
15             a>>=1;   //对a进行右移位运算,去掉最低位,下一次循环比较上一位,直至a的值为0;
16         }
17         printf("%d\n",b);   //输出异或运算后结果为1的位数有几位,即两个数的海明距离;
18     }
19     return 0;
20 }
知识兔
计算机