您好,登錄后才能下訂單哦!
#include<stdio.h> #include<stdlib.h> //方法一: int Numberof1(int n) { int count = 0; while(n) { if(n & 1) count++; n = n >> 1; //位操作比乘除運算效率高。 } return count; } //上面的程序如果傳入的n是一個負數,將造成死循環。因為負數移位時要保留符號位。 //方法二: int _Numberof1(int n) { int flag = 1; int count = 0; while(flag) //循環的次數與n的位數有關,時間復雜度高 { if(n & flag) count++; flag = flag<<1; } return count; } //方法三: int __Numberof1(int n) { int count = 0; while(n) //有多少個1循環多少次,比較高效 { count++; n = n & (n-1); } return count; } int main() { int sum = 20; int num1 = Numberof1(sum); int num2 =_Numberof1(sum); int num3 =__Numberof1(sum); printf("%d,%d,%d\n",num1,num2,num3); system("pause"); return 0; }
總結:
一般進行二進制操作時,都可以采用先-1,再按位與的方法。-1相當于從最右邊的1到最低位,全都按位取反,再與的話,就把最右邊的1置為0.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。