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 }
知识兔