C#实现10进制转2进制
生活随笔
收集整理的這篇文章主要介紹了
C#实现10进制转2进制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這幾天在復習計算機原理,看到二進制忽然想到二進制轉10進制的公式,然后轉念一想10進制轉二進制的公式好像沒印象,那索性自己寫出來。
結果學渣的我發現,并不能寫出來!什么數列,對數,xx函數忘得一干二凈,而且需要有需要判斷的地方,于是崩潰了,以前代數題并沒寫過條件啊~
索性用C#代碼搞出來(雖然在C#里有方法直接轉換)
| 二進制值 | 10進制值 | 公式 |
|---|---|---|
| 0 | 0 | 0 |
| 1 | 1 | 1 |
| 10 | 2 | f(2)=10^1=10 |
| 11 | 3 | f(3):比log?3最小的整數位1,記錄10^1,并3-(2^1)=1,f(1)=1,則最終結果為10^1+f(1)=10+1=11 |
| 100 | 4 | f(4):log?4=2,整數,直接返回10^2 |
| 101 | 5 | f(5):比log?5最小的整數位2,記錄10^2,并5-(2^2)=1,f(1)=1,則最終結果為10^2+f(1)=100+1=101 |
| 110 | 6 | f(6):比log?6最小的整數位2,記錄10^2,并6-(2^2)=2,f(2)=10,則最終結果為10^2+f(2)=100+10=110 |
| 111 | 7 | ……………… |
| 1000 | 8 | ……………… |
| 1001 | 9 | ……………… |
| 1010 | 10 | ……………… |
| 1011 | 11 | ……………… |
| 1100 | 12 | ……………… |
| 1101 | 13 | ……………… |
| 1110 | 14 | ……………… |
| 1111 | 15 | f(15):比log?15最小的整數位3,記錄10^3,并15-(2^3)=7,f(7)=111,則最終結果為10^3+f(7)=1000+111=1111 |
| 10000 | 16 | f(16):比log?6最小的整數位4,整數,直接返回10^4 |
公式是這樣子的。 假如求10進制數n的二進制,先求以2為底的n的對數log?N,判斷log?N是否為為整數,如果為整數直接返回10^log?N,否則求出比log?N最小的整數t(如1.001取1,2.02取2,3.9取3)。求出并記錄10^t,然后將n減去2^t并重復執行以上步驟,返回的值與記錄的10^t相加。
以上我們設這個函數為f(n);
貼代碼,無疑,用了遞歸~
private double DecimalToBinarySystem(int decimalNumber)
{
double standard = 0;
if (decimalNumber==0)
{
return 00;
}
if (decimalNumber==1)
{
return 01;
}
var doubleValue = (double) decimalNumber;
var logarithm = Math.Log(doubleValue,2 );
var logFormat = Math.Truncate(logarithm);
var baseNum = Math.Pow(10, logFormat);
if (logarithm.Equals(logFormat))
{
return baseNum;
}
var leftNumber = doubleValue - Math.Pow(2, logFormat);
return baseNum + DecimalToBinarySystem((int)leftNumber);
}
僅測試過大于等于0的整數,負數和小數未測試。
只是樂于思考一下,拋磚引玉歡迎指正
總結
以上是生活随笔為你收集整理的C#实现10进制转2进制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇瑞旗云3变速箱多少钱一台?
- 下一篇: 吉利嘉际质量怎么样 深度解析吉利嘉际的性