思路:利用&用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同。
1 #include<stdio.h>
2 #include<stdlib.h>
3
4 int main()
5 {
6 //i=1999 -> 011111001111
7 //j=2299 -> 100011111011
8 int i = 0, j = 0;
9 int a = 0, b = 0, num = 0;
10 //a与b分别是i与j二进制中的最后一位的数字,num 为位(bit)不同的个数
11 printf("请输入您要比较的两个数字:
");
12 scanf("%d %d", &i, &j);
13 while (i != 0 || j != 0)
14 {
15 //这里查看整数i的二进制的最后一位并赋值给a
16 //每次查看结束就右移一位改变最后一位的数值
17 if ((i & 1) == 1)
18 {
19 a = 1;
20 i = i >> 1;
21 }
22 else
23 {
24 a = 0;
25 i = i >> 1;
26 }
27 //这里查看整数j的二进制的最后一位并赋值给b
28 //每次查看结束就右移一位改变最后一位的数值
29 if ((j & 1) == 1)
30 {
31 b = 1;
32 j = j >> 1;
33 }
34 else
35 {
36 b = 0;
37 j = j >> 1;
38 }
39 //最后比较a和b的值,不一样则++num
40 if (a != b)
41 {
42 ++num;
43 }
44
45 }
46 printf("%d",num);
47
48 return 0;
49
50 }