两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

思路:利用&用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同。

 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 }
原文地址:https://www.cnblogs.com/cuckoo-/p/10360956.html