public static int bitcount(int i)
int型別是有符號型別的特點,當最高位為1時,表示乙個負值。利用這一特點,通過左移位操作<<,
然後判斷正負值,為負標明該位為1,正值標明該位為0。**如下。
public static int bitcount(int i)
return count;
}integer.bitcount中,
第一行是計算每兩位中的 1 的個數,並且用該對應的兩位來儲存這個個數,
如: 01101100 -> 01011000 ,即先把前者每兩位分段 01 10 11 00 ,分別有 1 1 2 0 個1,用兩位二進位制數表示為 01 01 10 00, 合起來為 01011000.
第二行是計算每四位中的 1 的個數,並且用該對應的四位來儲存這個個數.
如: 01101100 經過第一行計算後得 01011000 ,然後把 01011000 每四位分段成 0101 1000 ,段內移位相加: 前段 01+01 =10 , 後段 10+00=10, 分別用四位二進位制數表示為 0010 0010, 合起來為 00100010 .
下面的各行以此類推,分別計算每8位,16位,32位中的 1 的個數.
將 0x55555555, 0x33333333, 0x0f0f0f0f 寫成二進位制數的形式就容易明白了.
integer.bitcount 的演算法要比你的演算法效率高的多了.因為它沒有迴圈,而你的演算法中有迴圈.
求整數中1的個數
public static int bitcount int i int型別是有符號型別的特點,當最高位為1時,表示乙個負值。利用這一特點,通過左移位操作 然後判斷正負值,為負標明該位為1,正值標明該位為0。如下。public static int bitcount int i return cou...
求1到N的所有整數中「1」的個數
題意 給定乙個十進位制的整數n,求1到n的所有整數中 1 出現的個數 解題思路 最簡單的一種方法是對1到n中的每個整數的每一位進行判斷,使用除法與取餘的方式,這種方法的時間複雜度是o n logn 解法一 程式設計之美中通過分析,總結了這樣的乙個規律 假設要處理的資料n abcde,現在要計算百位上...
求1的個數
給定乙個數字,求其對應的二進位制的1的個數,比如 9,對應的二進位制的個數是1001,則對應的1的個數為2個。面試複習,乙個多月了,從看網易公開課 程式設計正規化 然後稍微翻翻了 premier c 接著看了嚴蔚敏的資料結構,說實話 不怎麼的,看到最後幾章,實在看不下去,就換 演算法導論 了,寫了2...