【漫步刷题路】- 找到两个二进制序列不同位有几位

请添加图片描述

题目要求

找到两个二进制序列不同位有几位:

方法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;
}

猜你喜欢

转载自blog.csdn.net/chuxinchangcun/article/details/121952187
今日推荐