十进制小数转二进制用计算机操作,十进制转二进制
十進制數(shù)轉(zhuǎn)換為二進制數(shù)時,由于整數(shù)和小數(shù)的轉(zhuǎn)換方法不同,所以先將十進制數(shù)的整數(shù)部分和小數(shù)部分分別轉(zhuǎn)換后,再加以合并。
中文名
十進制轉(zhuǎn)二進制
外文名
Decimal system to binary system適用領(lǐng)域
電子、編程、編碼
應(yīng)用學(xué)科
數(shù)學(xué)
十進制轉(zhuǎn)二進制二進制轉(zhuǎn)十進制
編輯
語音
十進制轉(zhuǎn)二進制方法一
小數(shù)點前或者整數(shù)要從右到左用二進制的每個數(shù)去乘以2的相應(yīng)次方并遞增,小數(shù)點后則是從左往右乘以二的相應(yīng)負次方并遞減。
例如:二進制數(shù)1101.01轉(zhuǎn)化成十進制
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)
所以總結(jié)起來通用公式為:
abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)
十進制轉(zhuǎn)二進制方法二
或者用下面這種方法:
把二進制數(shù)首先寫成加權(quán)系數(shù)展開式,然后按十進制加法規(guī)則求和。這種做法稱為"按權(quán)相加"法。
2的0次方是1(任何數(shù)的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的次方
此時,1101=8+4+0+1=13
再比如:二進制數(shù)100011轉(zhuǎn)成十進制數(shù)可以看作這樣:
數(shù)字中共有三個1 即第六位一個,第二位一個,第一位一個(從右到左),然后對應(yīng)十進制數(shù)即2的0次方+2的1次方+2的5次方, 即
100011=32+0+0+0+2+1=35
十進制轉(zhuǎn)二進制十進制轉(zhuǎn)二進制
編輯
語音
1. 十進制整數(shù)轉(zhuǎn)換為二進制整數(shù)十進制整數(shù)轉(zhuǎn)換為二進制整數(shù)采用"除2取余,逆序排列"法。具體做法是:用2整除十進制整數(shù),可以得到一個商和余數(shù);再用2去除商,又會得到一個商和余數(shù),如此進行,直到商為小于1時為止,然后把先得到的余數(shù)作為二進制數(shù)的低位有效位,后得到的余數(shù)作為二進制數(shù)的高位有效位,依次排列起來。
十進制整數(shù)轉(zhuǎn)二進制
如: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位
原理:
眾所周知,二進制的基數(shù)為2,我們十進制化二進制時所除的2就是它的基數(shù)。談到它的原理,就不得不說說關(guān)于位權(quán)的概念。某進制計數(shù)制中各位數(shù)字符號所表示的數(shù)值表示該數(shù)字符號值乘以一個與數(shù)字符號有關(guān)的常數(shù),該常數(shù)稱為 “位權(quán) ” 。位權(quán)的大小是以基數(shù)為底,數(shù)字符號所處的位置的序號為指數(shù)的整數(shù)次冪。十進制數(shù)的百位、十位、個位、十分位的權(quán)分別是10的2次方、10的1次方、10的0次方,10的-1次方。二進制數(shù)就是2的n次冪。
按權(quán)展開求和正是非十進制化十進制的方法。
下面我們開講原理,舉個十進制整數(shù)轉(zhuǎn)換為二進制整數(shù)的例子,假設(shè)十進制整數(shù)A化得的二進制數(shù)為edcba 的形式,那么用上面的方法按權(quán)展開, 得
A=a(2^0)+b(2^1)+c(2^2)+d(2^3)+e(2^4) (后面的和不正是化十進制的過程嗎)
假設(shè)該數(shù)未轉(zhuǎn)化為二進制,除以基數(shù)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,而a乘的是1,他本身絕對不包含因數(shù)2,只能余下。
商得:
b(2^0)+c(2^1)+d(2^2)+e(2^3),再除以基數(shù)2余下了b,以此類推。
當(dāng)這個數(shù)不能再被2除時,先余掉的a位數(shù)在原數(shù)低,而后來的余數(shù)數(shù)位高,所以要把所有的余數(shù)反過來寫。正好是edcba
2.十進制小數(shù)轉(zhuǎn)換為二進制小數(shù)
十進制小數(shù)轉(zhuǎn)換成二進制小數(shù)采用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數(shù),可以得到積,將積的整數(shù)部分取出,再用2乘余下的小數(shù)部分,又得到一個積,再將積的整數(shù)部分取出,如此進行,直到積中的小數(shù)部分為零,此時0或1為二進制的最后一位。或者達到所要求的精度為止。
然后把取出的整數(shù)部分按順序排列起來,先取的整數(shù)作為二進制小數(shù)的高位有效位,后取的整數(shù)作為低位有效位。
十進制小數(shù)轉(zhuǎn)二進制
如:0.625=(0.101)B
0.625*2=1.25======取出整數(shù)部分1
0.25*2=0.5========取出整數(shù)部分0
0.5*2=1==========取出整數(shù)部分1
再如:0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整數(shù)部分1
0.4*2=0.8========取出整數(shù)部分0
0.8*2=1.6========取出整數(shù)部分1
0.6*2=1.2========取出整數(shù)部分1
0.2*2=0.4========取出整數(shù)部分0
0.4*2=0.8========取出整數(shù)部分0
0.8*2=1.6========取出整數(shù)部分1
0.6*2=1.2========取出整數(shù)部分1
0.2*2=0.4========取出整數(shù)部分0
原理:
關(guān)于十進制小數(shù)轉(zhuǎn)換為二進制小數(shù)
假設(shè)一十進制小數(shù)B化為了二進制小數(shù)0.ab的形式,同樣按權(quán)展開,得
B=a(2^-1)+b(2^-2)
因為小數(shù)部分的位權(quán)是負次冪,所以我們只能乘2,得
2B=a+b(2^-1)
注意a變成了整數(shù)部分,我們?nèi)≌麛?shù)正好是取到了a,剩下的小數(shù)部分也如此。
值得一提的是,小數(shù)部分的按權(quán)展開的數(shù)位順數(shù)正好和整數(shù)部分相反,所以不必反向取余數(shù)了。
十進制轉(zhuǎn)二進制C++代碼void?DtoB(int?d)?{
if(d/2)
DtoB(d/2);
cout<
}
十進制轉(zhuǎn)換二進制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要為正整數(shù)
=====================================
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要為整數(shù),效果同Python3.8內(nèi)置函數(shù)bin()
===========================================
十進制轉(zhuǎn)二進制 Visual Basic 2015 代碼Private?Sub?轉(zhuǎn)換進制(sender?As?Object,?e?As?EventArgs)?Handles?btn轉(zhuǎn)換.Click
If?str十進制數(shù)是否合法(txt十進制數(shù).Text)?=?"整數(shù)"?Then
MessageBox.Show(str十進制整數(shù)轉(zhuǎn)二進制(txt十進制數(shù).Text))
ElseIf?str十進制數(shù)是否合法(txt十進制數(shù).Text)?=?"小數(shù)"?Then
Dim?整數(shù)部分?As?Long?=?CInt(txt十進制數(shù).Text.Substring(0,?txt十進制數(shù).Text.IndexOf(".")))
Dim?小數(shù)部分?As?Double?=?CDbl(CDbl(txt十進制數(shù).Text)?-?整數(shù)部分)
MessageBox.Show(str十進制整數(shù)轉(zhuǎn)二進制(整數(shù)部分)?&?"."?&?str十進制小數(shù)轉(zhuǎn)二進制(小數(shù)部分))
Else
MessageBox.Show("輸入數(shù)值不合法,請重新輸入!")
txt十進制數(shù).SelectAll()
txt十進制數(shù).Focus()
End?If
End?Sub
Private?Function?str十進制數(shù)是否合法(ByVal?str十進制數(shù)?As?String)?As?String
If?IsNumeric(str十進制數(shù))?Then
If?str十進制數(shù).Contains(".")?Then
Return?"小數(shù)"
Else
Return?"整數(shù)"
End?If
Else
Return?"不是數(shù)"
End?If
End?Function
Private?Function?str十進制整數(shù)轉(zhuǎn)二進制(ByVal?lng十進制整數(shù)?As?Long)?As?String
Dim?lng被除數(shù)?As?Long?=?lng十進制整數(shù)
Dim?str結(jié)果?As?String
Do
If?lng被除數(shù)?Mod?2?=?0?Then
str結(jié)果?&=?"0"
Else
str結(jié)果?&=?"1"
End?If
lng被除數(shù)?=?lng被除數(shù)?\?2
Loop?Until?lng被除數(shù)?=?0
str結(jié)果?=?StrReverse(str結(jié)果)
Return?str結(jié)果
End?Function
Private?Function?str十進制小數(shù)轉(zhuǎn)二進制(ByVal?dbl十進制小數(shù)?As?Double)?As?String
Dim?dbl被乘數(shù)?As?Double?=?dbl十進制小數(shù)
Dim?str結(jié)果?As?String
Do
dbl被乘數(shù)?*=?2
If?dbl被乘數(shù)?>=?1?Then
str結(jié)果?&=?"1"
dbl被乘數(shù)?-=?1
Else
str結(jié)果?&=?"0"
End?If
Loop?Until?dbl被乘數(shù)?=?0
Return?str結(jié)果
End?Function
十進制轉(zhuǎn)二進制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);
}
十進制轉(zhuǎn)二進制JAVA代碼
public?void?binaryToDecimal(int?n)?{
for(int?i?=?31;i?>=?0;?i--)?{
System.out.print(n?>>>?i?&?1);
}
}
詞條圖冊
更多圖冊
總結(jié)
以上是生活随笔為你收集整理的十进制小数转二进制用计算机操作,十进制转二进制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何理解Java中的自动拆箱和自动装箱?
- 下一篇: 一个App完成入门篇(五)- 完成新