HTML/JavaScript小工具

HTML/JavaScript小工具

2021年4月7日 星期三

正整數N的二進位有多少個1

 正整數N的二進位有多少個1

//假設N為9

 //作法1  找出 N&1 << i 等於 1 << i的個數

 //約要跑31次 第32位是正負符號

 int n = 9;//二進位為1001

 int count = 0;

 for (int i = 0;i <32;i++){

        if ((n & i << 1) == i << 1){

            count++;

        }

 }

 cout << count <<'\n';


 //作法2  利用減法特性

 // 此題來說跑2次 效能較好

  //假設N=9二進位為1001

 //1001 -1 = 1000  將 1001 & 1000 會變為1000

 //1000 -1 = 0111 因為0不夠減1所以要向右邊借2所以 減後答案為0111

 //將1000 & 0111 結果為 0 這就是結束點

 //原始數值定義為N 差定義為D

 //每次減完都會將最靠近右方的1變為0

 //D&N 正好可以消除靠近右方的1

 //例如:1000 -1 = 0111

 // 1000 & 0111 = 0000

 //此方法其實是在計算消除多少次1


 int n2 = 9;

 int count2 =0;

 while(n2){

     count2++;

     int d = n2 -1;

     n2 = n2 & d;

 }

 cout <<count2 <<'\n';

沒有留言:

張貼留言