#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//无符号位是防止负数从而导致结果出错
//因为计算机中存储的二进制为补码
//例如-1: 10000000000000000000000000000001,原码
// 11111111111111111111111111111110,反码
// 11111111111111111111111111111111,补码(计算机所存储的)
int bit(unsigned int n, unsigned int m);
int main()
{
int n = 0;
int m = 0;
printf("输入俩个数: ");
scanf("%d%d", &n, &m);
int count = bit(n, m);
printf("%d", count);
return 0;
}
int bit(unsigned int n, unsigned int m)
{
int count = 0;
//按位异或操作,二进制位相同为0不同则为1。
//例如 :1,3
//1. 0001 3. 0011
//1^3 0010
unsigned int tmp = n ^ m; //将俩数中不同的二进制位 置1 存放在tmp中
//求出tmp二进制中1的个数,即n,m俩数中二进制位不同的个数
while (tmp)
{
if (tmp % 2 == 1)
{
count++;
}
tmp = tmp / 2;
}
return count;
}
输入俩个int型整数,输出其二进制位有多少位不同
最新推荐文章于 2022-08-02 17:17:30 发布