#include<stdio.h> #include<stdlib.h> int BitDiffer(int m,int n) { int i = 0; int count = 0; for (; i < 32; i++) /*在计算机内是按32位二进制来存储的,循环32次*/ { if (m % 2 != n % 2) { count++; } m /= 2; n /= 2; } return count; } int main() { int m = 0; int n = 0; scanf("%d%d", &m, &n); int ret = BitDiffer(m,n); printf("%d", ret); system("pause"); return 0; }
模除来获取每一位二进制位原理:
1111对2取模后为1
1110对2取模后为0
则每次取模相当于得到的是该次循环二进制的最后一位
1111对2取整后为111
1110对2取整后为111
取整相当于将二进制最后一位去掉,开始下次循环
另外:
m /= 2; n /= 2;
可换成移位:
m = m >> 1; n = n >> 1;