题目:
求两个数二进制中不同位的个数
样例
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
牛客网链接:
求两个数二进制中不同位的个数
代码实现
#include <stdio.h>int main() {int a, b;scanf("%d %d",&a ,&b);int tmp = a ^ b;int count = 0;for(int i = 0; i< 32; i++){if((tmp >> i) & 1){count++;}}printf("%d\n", count);return 0;
}
在这里我的想法是将a和b按位异或,这样就可以将它们之间不同的位表示为1,相同的位表示为0,然后再通过循环统计1出现的次数就可以了。
在循环中一共循环32次(因为一个整型的大小是32个bite位),让a和b按位异或的结果tmp与1做按位与运算,这样就可以看出tmp的最低位是否为1,每次让tmp右移i位就可以得到每一位让每一位都成为最低位。
注意:对一个数进行按位移动操作不会改变其原本的值,只会改变它当前变量的值。