問題:
求一個數二進制中1的個數?
分析:
首先我們應該注意到這裏的“一個數”,並沒有指明是正整數,所以這裏就不能用傳統的方法將這個數轉化二進制,然後去求1的個數。 因爲負數會以補碼的形式存在於內存。這裏提供2中方法解決問題。
方法一:
二進制在內存中以32位存在,取出每一位判斷是否爲1,這裏會用到 &運算 和 右移 運算符
缺點: 每次必須循環32次,效率低。
方法二:
把一個整數減去一,再與原整數做與元算,會把該整數最右邊一變爲零,則一個二進制中有多少個一就可以進行多少次操作
這道題是以前做過的題,現在拿出來寫是爲了提醒自已,有時候不論是學習,還是其他的事,換一種思路換一種方法,或許會得到不一樣的效果。