題目:輸出乙個正整數的二進位制中1的個數。
示例:10(二進位制為1010),則輸出2
方案一:
基本思想:使用除法,不斷除以2,記錄餘數為1時的次數。
**:
while(i!=0)
方案二:
基本思想:使用位運算(效率上高於方案一),通過不斷的右移,記錄最右位為1的次數。
**:
while(i!=0)
注意:若輸入為負數的時候,會導致死迴圈。
方案三:
基本思想:乙個數的二進位制減去1之後,會發生這樣的改變:從最右邊的1開始到最後,所有位都會變反,而其他的位不變。將兩者進行&運算後,從原來最右邊的1開始就都變成了0。那麼,有多少個1,就有多少次這樣的運算。
例:(以下都是二進位制表示)
1100-1=1011,1100&1011=1000
1000-1=0111, 1000&0111=0000
一共進行了兩次這樣的運算(原始數中有兩個1)
**:
while(i!=0)
擴充套件:如何判斷乙個數是2的正次冪?
通過上面,我們發現,2的正次冪的二進位制表示中只有乙個1。
那麼若n&(n-1)為0,則n就是2的正次冪。
整數的二進位制表示
目錄總結 整數的二進位制表示,需要區分正整數和負整數來看。看正整數的二進位制表示,就要先了解一下位權。十進位制 二進位制都有位權。以 123 為例 123 1 10 2 2 10 1 3 10 0。每個位置的位權都不一樣,十進位制從右到左,以 1 開始,依次乘 10 也就是說第 1 位為 1 第 2...
LintCode 二進位制表示
給定乙個數將其轉換為二進位制 均用字串表示 如果這個數的小數部分不能在 32 個字元之內來精確地表示,則返回 error 樣例 n 3.72 返回 error n 3.5 返回 11.1 題目很簡單,直接上 吧 public class binaryrepresention return res.r...
LintCode 二進位制表示
給定乙個數將其轉換為二進位制 均用字串表示 如果這個數的小數部分不能在 32 個字元之內來精確地表示,則返回 error 您在真實的面試中是否遇到過這個題?yes 樣例n 3.72 返回 error n 3.5 返回 11.1 好久沒做題 有點懵逼 根據資料試出來的 臥槽 public class ...