一、求两个数二进制中不同位的个数
编程实现:两个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;
}
二、异或操作符的一些思考
结论:我们可以使用原本的基础信息去解码异或操作符加密的信息,不论信息被异或操作符加密了多少次。
既然异或操作符可以使一个新的二进制码存储两个不同的二进制码的相异信息,那么这些新的二进制码两两相异后产生的二重相异二进制码能不能通过一重的二进制码还原出原本的信息呢?答案是:可以的。