第一次尝试
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
int DifferentDigits(int m, int n) {
int ret = 0;
int flag = 0;
int num = 1;
//int flagm = 0;
//int flagn = 0;
flag = m ^ n;
for (int i = 0; i < 32; i++,num=num<<1) {
if ((flag & num) == num) {
ret++;
}
}
return ret;
}
int main() {
int m = 0;
int n = 0;
printf("请输入两个数:\n");
scanf("%d %d", &m, &n);
int ret = DifferentDigits(m, n);
/*int ret = 1;
ret=ret << 1;*/
printf("%d\n", ret);
return 0;
}
此代码要做的就是求两个int(32位)
整数 m 和 n 的二进制表达中,有多少个位(bit)不同? 那么首先,使用按位异或,将两个数的不同位变成 1,相同为变成 0,然后使用按位与,来求出其中有多少个 1 即可。