複製鏈接
請複製以下鏈接發送給好友

十進制轉二進制

鎖定
十進制數轉換為二進制數時,由於整數和小數的轉換方法不同,所以先將十進制數的整數部分和小數部分分別轉換後,再加以合併。
中文名
十進制和二進制的轉換
外文名
Decimal system to binary system
適用領域
電子、編程、編碼
應用學科
數學

十進制轉二進制進制簡介

十進制轉二進制 整數

短除法 短除法
十進制整數轉換為二進制整數採用"除2取餘,逆序排列"法。
具體做法是:用2整除十進制整數,可以得到一個商和餘數;再用2去除商,又會得到一個商和餘數,如此進行,直到商為小於1時為止,然後把先得到的餘數作為二進制數的低位有效位,後得到的餘數作為二進制數的高位有效位,依次排列起來
十進制整數轉二進制
如:255=(11111111)B
255/2=127=====餘1
127/2=63======餘1
63/2=31=======餘1
31/2=15=======餘1
15/2=7========餘1
7/2=3=========餘1
3/2=1=========餘1
1/2=0=========餘1
789=1100010101(B)
789/2=394 餘1 第10位
394/2=197 餘0 第9位
197/2=98 餘1 第8位
98/2=49 餘0 第7位
49/2=24 餘1 第6位
24/2=12 餘0 第5位
12/2=6 餘0 第4位
6/2=3 餘0 第3位
3/2=1 餘1 第2位
1/2=0 餘1 第1位
原理
眾所周知,二進制的基數為2,我們十進制化二進制時所除的2就是它的基數。談到它的原理,就不得不説説關於位權的概念。對於多位數,處在某一位上的“1”所表示的數值的大小,稱為該位的位權 。位權的大小是以基數為底,數字符號所處的位置的序號為指數的整數次冪。例如十進制第2位的位權為10,第3位的位權為100;而二進制第2位的位權為2,第3位的位權為4,百位、十位、個位十分位的權分別是10的2次方、10的1次方、10的0次方,10的-1次方。二進制數就是2的n次冪。
按權展開求和正是非十進制化十進制的方法。
下面我們開講原理,舉個十進制整數轉換為二進制整數的例子,假設十進制整數A化得的二進制數為edcba 的形式,那麼用上面的方法按權展開, 得
A=a(2^0)+b(2^1)+c(2^2)+d(2^3)+e(2^4) (後面的和不正是化十進制的過程嗎)
假設該數未轉化為二進制,除以基數2得
A/2=a(2^0)/2+b(2^1)/2+c(2^2)/2+d(2^3)/2+e(2^4)/2
注意:a不能整除2,但其他的能整除,因為他們都包含2,而a乘的是1,他本身絕對不包含因數2,只能餘下。
商得:
b(2^0)+c(2^1)+d(2^2)+e(2^3),再除以基數2餘下了b,以此類推。
當這個數不能再被2除時,先餘掉的a位數在原數低,而後來的餘數數位高,所以要把所有的餘數反過來寫。正好是edcba

十進制轉二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,此時0或1為二進制的最後一位。或者達到所要求的精度為止。
然後把取出的整數部分按順序排列起來,先取的整數作為二進制小數的高位有效位,後取的整數作為低位有效位。
十進制小數轉二進制
如:0.625=(0.101)B
0.625*2=1.25======取出整數部分1
0.25*2=0.5========取出整數部分0
0.5*2=1==========取出整數部分1
再如:0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整數部分1
0.4*2=0.8========取出整數部分0
0.8*2=1.6========取出整數部分1
0.6*2=1.2========取出整數部分1
0.2*2=0.4========取出整數部分0
0.4*2=0.8========取出整數部分0
0.8*2=1.6========取出整數部分1
0.6*2=1.2========取出整數部分1
0.2*2=0.4========取出整數部分0
原理:
關於十進制小數轉換為二進制小數
假設一十進制小數B化為了二進制小數0.ab的形式,同樣按權展開,得
B=a(2^-1)+b(2^-2)
因為小數部分的位權是負次冪,所以我們只能乘2,得
2B=a+b(2^-1)
注意a變成了整數部分,我們取整數正好是取到了a,剩下的小數部分也如此。
值得一提的是,小數部分的按權展開的數位順數正好和整數部分相反,所以不必反向取餘數了。

十進制轉二進制代碼

十進制轉二進制C++代碼
void DtoB(int d) {
    if(d/2)
        DtoB(d/2);
    cout<<d%2;
}
十進制轉換二進制python代碼
def Dec2Bin(dec):
    temp = []
    result = ''
    while dec:
        quo = dec % 2
        dec = dec // 2
        temp.append(quo)
    while temp:
        result += str(temp.pop())
    
    return result
print(Dec2Bin(62))
#dec要為正整數
=====================================
def bilibili(b):
    t=[]
    i=''
    e=''
    while b<0:
        b=-b
        i='-'
    while b//2!=0:
        a=b%2
        t.append(a)
        b=b//2
    if b!=0:
        t.append(1)
    else:
        t.append(0)
    while t:
        e+=str(t.pop())

    return (i+"0b"+e)

#b要為整數,效果同Python3.8內置函數bin()
===========================================

十進制轉二進制 Visual Basic 2015 代碼
Private Sub 轉換進制(sender As Object, e As EventArgs) Handles btn轉換.Click
    If str十進制數是否合法(txt十進制數.Text) = "整數" Then
        MessageBox.Show(str十進制整數轉二進制(txt十進制數.Text))
    ElseIf str十進制數是否合法(txt十進制數.Text) = "小數" Then
Dim 整數部分 As Long = CInt(txt十進制數.Text.Substring(0, txt十進制數.Text.IndexOf(".")))
Dim 小數部分 As Double = CDbl(CDbl(txt十進制數.Text) - 整數部分)
        MessageBox.Show(str十進制整數轉二進制(整數部分) & "." & str十進制小數轉二進制(小數部分))
    Else
        MessageBox.Show("輸入數值不合法,請重新輸入!")
txt十進制數.SelectAll()
txt十進制數.Focus()
    End If
End Sub
Private Function str十進制數是否合法(ByVal str十進制數 As String) As String
    If IsNumeric(str十進制數) Then
        If str十進制數.Contains(".") Then
            Return "小數"
        Else
            Return "整數"
        End If
        Else
            Return "不是數"
        End If
     End Function
Private Function str十進制整數轉二進制(ByVal lng十進制整數 As Long) As String
    Dim lng被除數 As Long = lng十進制整數
    Dim str結果 As String
    Do
    If lng被除數 Mod 2 = 0 Then
        str結果 &= "0"
    Else
        str結果 &= "1"
    End If
        lng被除數 = lng被除數 \ 2
        Loop Until lng被除數 = 0
        str結果 = StrReverse(str結果)
        Return str結果
    End Function
Private Function str十進制小數轉二進制(ByVal dbl十進制小數 As Double) As String
    Dim dbl被乘數 As Double = dbl十進制小數
    Dim str結果 As String
    Do
    dbl被乘數 *= 2
    If dbl被乘數 >= 1 Then
        str結果 &= "1"
        dbl被乘數 -= 1
    Else
        str結果 &= "0"
    End If
    Loop Until dbl被乘數 = 0
        Return str結果
    End Function

十進制轉二進制PHP代碼
function Dec2Bin($dec) {
    if (!is_int($dec)) return false;
    $bin = '';
    while ($dec>1) {
        $bin .= $dec%2;
        $dec = ($dec-$dec%2)/2;
    }
    return strrev($bin.$dec);
}

十進制轉二進制JAVA代碼
public void binaryToDecimal(int n) {
    for(int i = 31;i >= 0; i--) {
        System.out.print(n >>> i & 1);
    }
}

十進制轉二進制二進制轉十進制

十進制轉二進制公式

小數點前或者整數要從右到左用二進制的每個數去乘以2的相應次方並遞增,小數點後則是從左往右乘以二的相應負次方並遞減。
例如:二進制數1101.01轉化成十進制
1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25(10)
所以總結起來通用公式為:
abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)

十進制轉二進制方法

或者用下面這種方法:
把二進制數首先寫成加權係數展開式,然後按十進制加法規則求和。這種做法稱為"按權相加"法。
2的0次方是1(任何數的0次方都是1,0的0次方無意義)
2的1次方是2
2的2次方是4
2的3次方是8
2的4次方是16
2的5次方是32
2的6次方是64
2的7次方是128
2的8次方是256
2的9次方是512
2的10次方是1024
2的11次方是2048
2的12次方是4096
2的13次方是8192
2的14次方是16384
2的15次方是32768
2的16次方是65536
2的17次方是131072
2的18次方是262144
2的19次方是524288
2的20次方是1048576
2的次方 2的次方
即:
此時,1101=8+4+0+1=13
再比如:二進制數100011轉成十進制數可以看作這樣:
數字中共有三個1 即第六位一個,第二位一個,第一位一個(從右到左),然後對應十進制數即2的0次方+2的1次方+2的5次方, 即
100011=32+0+0+0+2+1=35