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

2021-06-27 03:05:06 字數 1178 閱讀 9990

1。最簡單的方法:使用bitset   

[cpp]view plain

copy

unsigned count (unsigned u)    

2。使用移位迴圈測試

[cpp]view plain

copy

unsigned count (unsigned u)  

return

ret;  

}  

3。使用分治法

若f(n),b(n)表示 高/低 n位1出現的次數,則有f(32)=f(16)+b(16)。依照此公式依次推下去,反過來從小到大的組合起來便得到這道提的答案了。

[cpp]view plain

copy

unsigned count(unsigned u)    

解析:這個二分法的原理:

用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。

所以其實就是不斷累加的過程

十六進製制轉換成十進位制 二進位制

十六進製制轉二進位制 public string htob string a 二進位制轉十六進製制 public string btoh string a 任意進製數轉為十進位制數 public string tod string a,int b return string.valueof r 將十...

十進位制轉換成二進位制,八進位制,十六進製制

好久沒有寫過c 了。看到以前課本上有這樣一道題 列印整數1到156的二進位制 八進位制 十六進製制和十進位制對照表。很基礎的知識,權當溫習下知識。如下 author finux time sat 20 sep 2008 02 25 03 pm cst filename main.cpp descri...

將有符號十進位制數轉換成二進位制

function numbin dec2binpn numdec,n 判斷輸入數正負 if numdec 0 正數轉二進位制 numbin1 dec2bin numdec,n else 負數轉二進位制 numbin1 dec2bin abs numdec n l1 length numbin1 nu...