一個十進位制整數轉換成二進位制含多少個1
阿新 • • 發佈:2019-02-14
這個二分法的原理:
用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。
所以其實就是不斷累加的過程
用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。
所以其實就是不斷累加的過程