(1)代码1是自己写的,没有运行出来
#include <stdio.h> #include <windows.h> #pragma warning (disable:4996) /*编程实现: 两个int(32位)整数m和n的二进制表达中, 有多少个位(bit)不同? 输入例子: 1999 2299 输出例子:7*/ int Find(int m,int n){ int a[32]; int b[32]; int i = 0; int j = 0; int count = 0; for (; j < 32; j++){ if (m % 2 != 0){ a[i] = 1; } else{ a[i] = 0; } i++; } for (j = 0, i = 0; j < 32;j++){ if (n%2!=0){ b[i] = 1; } else{ b[i] = 0; } i++; } for (i = 31; i <=0;i++){ if (a[i]!=b[i]){ count++; } } return count; } int main(){ int m, n; printf("Enter Two Numbers:\n"); scanf("%d%d",&m,&n); printf("%d", Find(m,n)); system("pause"); return 0; }(2)第二个代码是我在网上找的,更加简便
#include <stdio.h> #include <windows.h> #pragma warning (disable:4996) int Find(int m, int n){ int j = 0; int count = 0; for (; j < 32;j++){ if ((m%2)!=(n%2)){ //这边可以写出if((m&1)!=(n&1)) 不过我一直没搞懂这是什么意思 count++; } m = m >> 1; n = n >> 1; } return count; } int main(){ int m, n; printf("Enter Two Numbers:\n"); scanf("%d%d",&m,&n); printf("%d\n", Find(m,n)); system("pause"); return 0; }(3)老师上课讲的方法,更为简单,这四种方法都是可以的
#include <stdio.h> #include <windows.h> int DiffBit1(int m,int n){ int i = 0; int count = 0; int tmp; tmp = m^n; for (; i < 32;i++){ if ((tmp>>i)&1==1){ count++; } } return count; } int DiffBit2(int m, int n){ int count = 0; int tmp; tmp = m^n; while (tmp){ if (tmp&1==1){ count++; } tmp=tmp >> 1; } return count; } int DiffBit3(int m, int n){ int count = 0; int tmp; tmp = m^n; while (tmp){ count++; tmp = tmp&tmp - 1; } return count; } int main(){ printf("%d\n", DiffBit(6, 7)); system("pause"); return 0; }
