练习题——【学习补档】求两个数二进制中不同位的个数

一、求两个数二进制中不同位的个数

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?

分析:求二进制格式的有多少位不同。求位不同问题,用异或操作符
思路:通过异或、循环的方式把每一位不同都显示出来。我们循环推进对比两个数的第一位就可以得知整个数的不同位是多少。
解决方案:我们通过一个异或操作符,把两个数二进制码的相异信息聚合到一个二进制码内,然后对该二进制码进行信息提取,即可知道有多少个不同的二进制位。

在这里插入图片描述

#include <stdio.h>
int main() 
{
    int a, b;
    int n=0;
    while (scanf("%d %d", &a, &b) != EOF) 
    { 
        int j=0;
        while(j<=31)
        {
            if((((a^b)>>j)&1)!=0)	//要把范围限定到第一位,然后再对比
            {
              n++;
            }
            j++;
        }
    }
    printf("%d\n", n);
    return 0;
}

二、异或操作符的一些思考

结论:我们可以使用原本的基础信息去解码异或操作符加密的信息,不论信息被异或操作符加密了多少次。

既然异或操作符可以使一个新的二进制码存储两个不同的二进制码的相异信息,那么这些新的二进制码两两相异后产生的二重相异二进制码能不能通过一重的二进制码还原出原本的信息呢?答案是:可以的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值