栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目录
      • 题目要求
        • 方法1:遍历两个二进制序列,每一位比较是否相等
        • 方法2:使用异或

题目要求

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/664090.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号