——————————————————————————————————————————————————————————————————————
题目:
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
示例:
输入 | 输出 |
---|---|
10 11 | 1 |
解题思路:
本题有俩种解法
1.因为整数具有32个比特位,利用>>进行移位,利用&1依次取出进行对比
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int count = 0;
scanf("%d%d",&a,&b);
int i = 0;
for(i = 0; i < 32; i++) //从第一位开始判断,二进制位是否相同
{
if(((a>>i)&1) != ((b>>i)&1)) //利用&依次取出相对位进行比较
{
count++; //计算不相同的个数
}
}
printf("%d\n",count);
return 0;
}
2.运用^进行俩个整数二进制运算,在运用ret&(ret-1)进行1个数的计算
^运用:二进制对位相同则为0,不同则为1;
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int count = 0;
scanf("%d%d",&a,&b);
int ret = a ^ b; //异或后的二进制位
while(ret)
{
ret = ret&(ret-1); //依次取出最后面的1
count++;
}
printf("%d\n",count);
return 0;
}
欢迎各位大佬斧正🧍♂️,如有问题请评论留言,感谢大家支持🙏