1. 程式人生 > >一個十進位制整數轉換成二進位制含多少個1

一個十進位制整數轉換成二進位制含多少個1

 這個二分法的原理:
用8位二進位制數來做示範好了,例如 u = 10110011。
10110011  (原數)
00010001    //每兩位取1位,即取偶數位, u & 01010101
01010001    //取奇數位並右移一位, (u >> 1) & 01010101
--------------(紅色轉化十進位制為2,再看原數低二位上的1共有2個,同理其它組分別為0,2,1,從低到高看)
01100010    //上面兩數相加,賦值給u,注意每兩列相加的結果不會進位到第三列
00100010    //每四位取低兩位, u & 00110011
00010000    //每四位取高兩位並右移兩位, (u >> 2) & 00110011
--------------(整個紅色轉化十進位制為2,再看原數低四位上的1共有2個,同理高四位為3)
00110010    //上面兩數相加,賦值給u
00000010    //每八位取低四位, u & 00001111
00000011    //每八位取高四位並右移四位,(u >> 4) & 00001111
--------------(整個紅色轉化十進位制為5,再看原數所有位上的1共有5個)
00000101    //上面兩數相加,賦值給u 
最終結果 u = 5。
所以其實就是不斷累加的過程