天天看點

如何實作:兩個int(32位)整數m和n的二進制表達中,有多少個位(bit)不同?

  兩個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;
}      

實驗上面的例子:

如何實作:兩個int(32位)整數m和n的二進制表達中,有多少個位(bit)不同?