數字之美之-------求二進位制中1的個數
阿新 • • 發佈:2019-01-23
最簡單的方法就是,直接異或A^B,得等到的結果中1的個數就表示整數A和B的二進位制表示中有多少位是不同的。
這是一類問題的變形,原題是:求二進位制中1的個數?
#include <stdio.h> void main() { int num=0; unsigned int var1,var2; unsigned int result; scanf("%d%d",&var1,&var2); printf("%d %d\n",var1,var2); result = var1 ^ var2; //異或運算 printf("%d\n",result); while(result) //求正整數result裡含有的1的個數 { num +=(result)&(0x01); result>>=1; //這裡容易出錯!!!! 首次編寫的時候寫成result>>1;造成死迴圈 } printf("%d\n",num); }
首次編寫的時候寫成result>>1;造成死迴圈 ,如果是result>>1,result的值並沒有變化,一定要result=result>>1.
另外,移位運算比(除+取模運算)效率更高,所以採用移位運算!