判斷乙個數中有多少個1

2021-07-04 10:58:32 字數 582 閱讀 3504

碰到這個問題的一開始,大家都想當的是把數字轉化成二進位制數然後再進行判斷並不是最好的,下面提供一種位運算的方法:

把乙個整數減去1,再和原整數做與運算,會把該整數最右邊乙個1變成0.那麼乙個整數的二進位制有多少個1,就可以做多少這樣次這樣的操作。基於這種思路,我們可以寫出新的**:

int numberof1( int  n)

return count; }

同樣這類問題可以舉一反三:

1.用一條語句判斷乙個整數是不是2的整數次冪。乙個整數如果是2的整數次冪,那麼他的二進位制表示中有且只有一位是1,而其他所有位都是0,根據前面的分析,把這個整數減去1之後再和它自己做與運算,這個整數中唯一的1就會變成0。

2.輸入兩個整數m和n,計算需要改變m的二進位制表示中的多少位才能得到n。比如10的二進位制表示為1010,13的二進位制表示為1101,需要改變1010中的3位才能得到1101。我們可以分為兩步解決這個問題:第一步求這兩個數的異或,第二步統計異或結果中1的位數。

總結:把乙個整數減去 1後再與原來的整數做位與運算,得到的結果相當於是把整數的二進位制表示中的最後乙個1變成0。很多二進位制的問題都可以用這個思路解決。

求乙個數的二進位制中有多少個1

思路 首先,大部分人最先想到的解題方法是 獲得這個數的每個二進位制位上的數,然後判斷與1按位與 0 1 0,1 1 1 的結果是否等於1,若等於1,則說明這個二進位制位上的數是1,則計數加1,最後返回計數的結果。此外,還有另一種更簡單的解法 n n n 1 讓這個數n與n 1按位與再賦給n,它的意義...

Delphi 判斷乙個二進位制數中有多少個1

技術交流,dh講解 有個朋友發簡訊來求助,我想他是在筆試.哈哈.c 的,但是我們知道原理後,什麼都是一樣的.乙個數的二進位制形式是這樣的.10011001 那麼要判斷有多少個1的話,我們只要與 00000001與,然後迴圈右移與就可以了.比如第一次 10011001 and 00000001 1 說...

計算乙個數的二進位制表示中有多少個1

計算機裡的數字本來就是用二進位制存的,所以計算過程也都是二進位制計算。利用一些位運算的特性,可以很容易計算1的個數。有乙個很有意思的特性 隨便給乙個二進位制數,比如n 10001100,我們把它減一 n 1 10001011。重新擺放一下觀察 10001100 n 10001011 n 1 通過觀察...