如何判斷一個數二進位制中“1”的個數
阿新 • • 發佈:2018-12-26
在這裡我們以數字“7”為例(數字“7”的二進位制為“111”,有三個“1”),提供兩種方法來判斷一個數中二進位制中“1”的 個數!
1.使用移位操作符(右移操作)
讓二進位制的每一位&(邏輯與)1,如果得到的結果為數字“1”,則二進位制數該位有一個“1”。
#include<stdio.h> int main() { int num = 7; int count = 0; while (num) { if (num & 1 == 1) { count++; } num = num >> 1; } printf("num中1的個數有:%d", count); return 0; }
2.巧妙運用數字之間的關係(最高效演算法)
讓我們要計算的數與該數減一的 進行&運算,當計算結果為0時,程式結束。
例如,讓7(111)&6(110)得到的是6(110),接著6(110)&5(101)得到4(100),接著4(100)&3(011)得到0(000),程式結束, 得到的結果就是有3個“1”。
上述兩個程式碼的結果都是一樣的,執行結果如下:#include<stdio.h> int main() { int num = 7; int count = 0; while (num) { num = num&(num - 1); count++; } printf("num中1的個數:%d\n", count); return 0; }
像這樣的問題都是一些比較簡單的演算法,有時程式碼看起來很容易,但讓自己去想,可能一時半會想不到,這就需要我們多去看書,多去總結和積累!