Requirements
题目名称
求二进制中不同位的个数
题目内容
两个int(32位)整数m和n的二进制表达中,有多少个位bit不同?
输入例子
1999 2299
输出例子
7
思路分析
想要解此题,建议小可爱们先去看看上面这篇文章。
.
C语言里有3个位操作符,分别是&、 | 、 ^
- &: 按2进制位与
同时为1,才为1。 - | : 按2进制位或
只要有1 ,就为 1 - ^ :按2进制位异或
对应位相同为0,相异为1
.
所以对于这道题,要求求出两个int类型整数二进制对应比特不同的个数。如果采用&,应该是求他对应2进制位相同的个数。如果使用^,当对应二进制位不同时(相异为1),结果为1,所以就将问题转换成了求二进制补码中1的个数。
接下来就看看代码吧~~~
Codes
#include <stdio.h>
int get_diff_bit(int m, int n)
{
int count = 0;
int tmp = m ^ n;
while (tmp)
{
tmp = tmp & (tmp - 1);
count++;
}
return count;
}
int main()
{
//^异或 相同为0 相异为1
int m, n;
scanf("%d%d", &m, &n);
int count = get_diff_bit(m, n);
printf("%d", count);
return 0;
}