//第一次尝试:
#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即可
原文:https://www.cnblogs.com/zhm521/p/13926698.html