【漫步刷题路】- 找到两个二进制序列不同位有几位
作者:互联网
目录
题目要求
找到两个二进制序列不同位有几位:
方法1:遍历两个二进制序列,每一位比较是否相等
int count_difer_bit(int n1, int n2)
{
int count = 0;
int i = 0;
//4个字节:32位,所以比较次数:32次
for (i = 0; i < 32; i++)
{
//两个数的二进制序列对应比特位与上1之后进行比较
if ( ( (n1 >> i) & 1 ) != ((n2 >> i) & 1) )
{
count++;
}
}
return count;
}
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int ret = count_difer_bit(n,m);
printf("%d %d二进制序列中有%d位不同\n", n, m, ret);
return 0;
}
方法2:使用异或
异或:相同为0,相异为1
把要求的两个二进制序列异或起来,看异或后的结果有几个1,则原来的两个数就有几个二进制序列不同
//得到二进制序列有多少个1
int Numberf1(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
//两个二进制比较
int count_diff_bit(int n1, int n2)
{
int count = 0;
int t = n1 ^ n2; //n1 n2异或
count = Numberf1(t);
return count;
}
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int ret = count_diff_bit(n,m);
printf("%d %d二进制序列中有%d位不同\n", n, m, ret);
return 0;
}
标签:count,return,二进制,位有,int,异或,序列,刷题 来源: https://blog.csdn.net/chuxinchangcun/article/details/121952187