宣告:最後一種降冪法頗具魅力,而且與方法二有異曲同工之妙
十進位制轉二進位制的幾種方法
輸入:乙個無符號的十進位制整數
輸出:對應十進位制的二進位制顯示
例如:input = 10,output = 1010
方法一:除二取餘法
forinput != 0
cout << input % 2
input /= 2;
end
輸出順序從低位0到高位(最高的1)依次輸出
方法二:位運算
lowone = input & ~(input - 1) //得到最低位的1對應的數值
input = input & (input - 1) //從input中去除最低位的1
方法三:降冪演算法
1. input > 2^n,(n要盡量大)
2. input > 2^n ,所以n位對應1
compare( input, 2^(n - 1)), 如果<,輸出0;如果》=,輸出1,且從input中減去後者。
n從n開始連續判斷到0為止。
例子:十進位制整數100,那麼n=6,因為2^6=64<100,2^7=128>100
二進位制 十進位制 二進位制
1100100 100 > 2^6 = 1
100100 36 > 2^5 = 1 (36 = 100-2^6)
00100 4 < 2^4 = 0 (4 = 36-2^5)
0100 4 < 2^3 = 0 (4 維持上一次的結果)
100 4 = 2^2 = 1 (4 維持上一次的結果)
00 0 < 2^1 = 0 (0 = 4-2^2)
0 0 < 2^0 = 0 (0 維持上一次的結果)
上式中紅色代表二進位制,黑色代表十進位制,所以100的二進位制等於1100100
原理:從高位向低位的順序,判斷每一位是1還是
0.定理:乙個十進位制整數肯定大於等於只留下它的最高位
1(二進位制)對應的十進位制數,例如5(
101)
>4
(100),7
(111
)>4
(100
)。所以,只要滿足上面的定理,就知道最高位的1處於第幾位(從左往右,以0為起始位),即剛才說的「盡量大的n」。然後,減掉這個2^n(最高位1對應的十進位制數),進行下一次的判斷,對比2^(n-1).因為最高的1已經確定在第n位,那麼接下來當然判斷n-1位。而且,前面的減去2^n就等價於去掉原先最高位的1.
二進位制轉十進位制
二進位制轉十進位制方法很多,如字元陣列,指標法等 下面用字串函式的方法實現 二進位制轉十進位制 主要用 到 string函式性質及pow求乙個數的n次方的函式過載 by adengou 2010.08.04 win7 dev c 5.0 vs 2010 通過 include include incl...
十進位制轉二進位制
includeint dg unsigned n,int c 注意 引數型別是unsigned int main 陣列全部初始化為0 printf d n sizeof int unsigned temp,u temp u 4294967295u int tu int u printf u u,tu...
十進位制轉二進位制
將乙個長度最多為30位數字的十進位製非負整數轉換為二進位制數輸出。多組資料,每行為乙個長度不超過30位的十進位製非負整數。注意是10進製數字的個數可能有30個,而非30bits的整數 每行輸出對應的二進位制數。示例1 013 80111 1000 本題輸入的數可能多達30多位,因此無法用整型數來儲存...