兩個int(32位)整數 m和 n的二進制表達中,有多少個位(bit)不同?
eg: 輸入1999 2299 輸出 7
(^)
如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
是以我們隻須判斷對應的比特位的值異或是否為1即可。
2、 我們試着先比較最後一位,要考慮&的性質
0&1=0 1&1=1
任何數&1都是它本身,任何數&0都是0
是以(num1&1)就得到最後一個比特位的值。
3、考慮我們如何得到每一個比特位。
(>>=1)後&1即得到上一位比特位的值。
循環完即可。
程式如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string>
void differ_num(int num1,int num2)
{
int a = 0; int i = 0;
for (i = 0; i < 32; i++)
{
if ((num1&1)^(num2&1)==1)
a++;
num1 >>= 1;
num2 >>= 1;
}
printf("%d\n", a);
}
int main()
{
int m = 0, n = 0;
scanf("%d %d", &m,&n);
differ_num(m, n);
system("pause");
//printf("%d", a);
return 0;
}
實驗上面的例子:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5yMyETOxczMiNWZxMGZ3QjNzYzX3MTO0ATM0AzLcFTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)