佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 一篇教程教你學(xué)會Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)

一篇教程教你學(xué)會Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)

熱門標(biāo)簽:百度AI接口 Win7旗艦版 客戶服務(wù) 語音系統(tǒng) 企業(yè)做大做強 硅谷的囚徒呼叫中心 呼叫中心市場需求 電話運營中心

一、導(dǎo)言

導(dǎo)語:

在計算機進(jìn)行數(shù)據(jù)交換時,常常會有一個進(jìn)制轉(zhuǎn)換的過程,我們知道計算機只認(rèn)0 和 1.在內(nèi)存系統(tǒng)中,基本基于二進(jìn)制進(jìn)行運算的,但是有時候數(shù)據(jù)過于龐大,為了方便存儲管理,計算機會使用十六進(jìn)制存儲數(shù)據(jù),但是怎么實現(xiàn)數(shù)據(jù)轉(zhuǎn)換呢?
我們?nèi)祟愑墒种割^,所以自然就使用十進(jìn)制啦,每當(dāng)我們數(shù)數(shù)字到10之后,于是就重0 開始繼續(xù)數(shù),所以逢十進(jìn)一就這么來了。

對于其它進(jìn)制呢,也是同樣的,比如最常見的二進(jìn)制,也就是逢二進(jìn)一,慢慢來,依次類推,所以數(shù)學(xué)的世界是多么的奇妙呀!

今天給大家?guī)淼氖鞘褂?Python 實現(xiàn)進(jìn)制轉(zhuǎn)換,內(nèi)容包括如下:

dec(十進(jìn)制)—> bin(二進(jìn)制)
dec(十進(jìn)制)—> oct(八進(jìn)制)
dec(十進(jìn)制)—> hex(十六進(jìn)制)

二、各種進(jìn)制介紹

在轉(zhuǎn)換之前,我們先了解以下各種進(jìn)制

十進(jìn)制(Decimal)

我們所熟知的十進(jìn)制,其實是從 0 開始,數(shù)到 9 之后,就跳到 10,這樣就變成了 10,數(shù)數(shù)大家總會把

二進(jìn)制(Binary)

二進(jìn)制同理,從 0 開始也就是 00(前面的一個0可以省去,但是為了更好的描述,所以保留),到 01,也變成了 10【對應(yīng)十進(jìn)制中的 3】,然后是 11【對應(yīng)十進(jìn)制中的 4】,100【十進(jìn)制中的5】。。。以此類推

因為 二進(jìn)制 的英文單詞是 binary,所以在計算機運算的過程中,使用二進(jìn)制會用如下方法,0b11(4),0b1101(13)等等

八進(jìn)制(Octal)

理解了二進(jìn)制,在理解八進(jìn)制就很容易了,八進(jìn)制是逢八進(jìn)一,范圍是 0~7,對比一下二進(jìn)制,就很好理解啦??!

十六進(jìn)制(Hexadecimal)

十六進(jìn)制就可能會相對復(fù)雜一點點,十六進(jìn)制是用數(shù)字 0~9 和 英文字母 A - F(大小寫隨意) 表示,因此 A代表 10, F代表 15。為什么在計算機領(lǐng)域中,十六進(jìn)制用途會如此廣泛呢?

給大家看一個對比:


當(dāng)數(shù)據(jù)比較大的時候,二進(jìn)制顯然不再那么使用,再看使用十六進(jìn)制,就簡短很多。

十六進(jìn)制的運用領(lǐng)域可不止如此,比如原畫師調(diào)色的時候,如果使用 RGB 三原色的話,那就會有 256 x 256 x 256 種組合,我們就可以使用十六進(jìn)制,把每一種顏色對比轉(zhuǎn)換成 十六進(jìn)制字符,就會方便很多,以下是我之前調(diào)色的時候?qū)懙囊粋€很簡單一個 C 語言小程序,呃,似乎有點跑題了,哈哈,不管了

#includestdio.h>
#includestdlib.h> 
int main()
{
	printf("rgb三原色轉(zhuǎn)16進(jìn)制\n");
	int a,b,c,d;
	while(d != 2){
		printf("輸入1繼續(xù),輸入2退出\n");
		scanf("%d",d);
		scanf("%d%d%d",a,b,c);
		printf("[%x %x %x]\n",a,b,c); //%x 可以直接把我們輸入的十進(jìn)制轉(zhuǎn)換為 十六進(jìn)制
	}
	return 0;
} 

三、使用 Python 代碼完成轉(zhuǎn)換

3.1 十進(jìn)制轉(zhuǎn)換為二進(jìn)制

我記得不太清楚是啥時候第一次學(xué)進(jìn)制轉(zhuǎn)換的,進(jìn)制轉(zhuǎn)換常用的方法就是對 2 取余數(shù),然后得到余數(shù)反轉(zhuǎn)連在一起就是 我們所需要的二進(jìn)制,舉個例子,比如我要計算 十進(jìn)制數(shù) 13 的 二進(jìn)制是多少?


這也是老師教我們的方法,也是我們第一次接觸進(jìn)制轉(zhuǎn)換的時候,用目標(biāo)數(shù) num 對 2求 余數(shù),直到 商為 0 的時候,結(jié)束,然后將余數(shù)反向組合輸出,及為我們所求的 2 進(jìn)制數(shù)。有的同學(xué)會問,我怎么就能這么確定這就是 13 對應(yīng)的 2 進(jìn)制數(shù)呢?

答曰:

由于二進(jìn)制的特殊性,數(shù)字從右邊往左邊數(shù),依次對應(yīng) 20 x 1 + 21 x 0 + 22x 1 + 23 x 1 = 1 +4 +8 = 13, 給大家一個速記口訣,1,2,4,8,16,32,64,128,256,512,1024。分別是 20~ 210對應(yīng)的值

所以有了思路,我們就可以愉快的敲代碼了

# 十進(jìn)制整數(shù)轉(zhuǎn)二進(jìn)制

def dec_to_bin(num): #函數(shù)名做到見其名知其意

l = [] # 創(chuàng)建一個空列表

if num0: # 是負(fù)數(shù)轉(zhuǎn)換成整數(shù)

return "-"+ dec_to_bin(abs()) # 如過是負(fù)數(shù),先轉(zhuǎn)換成正數(shù)

while True:

num, reminder = divmod(num,2) # 短除法,對2求,分別得到除數(shù) 和 余數(shù)、這是 Python 的特有的一個內(nèi)置方法,分別可以到商 及 余數(shù)

l.append(str(reminder)) # 把獲得的余數(shù) 存入字符串

if num == 0: # 對應(yīng)了前面的話,當(dāng)商為 0時,就結(jié)束啦

return “”.join(l[::-1]) # 對列表中的字符串進(jìn)行逆序拼接,得到一個二進(jìn)制字符串

3.2 十進(jìn)制轉(zhuǎn)八進(jìn)制

理解了二進(jìn)制的轉(zhuǎn)換,八進(jìn)制一樣不難。同樣是目標(biāo)數(shù) num對八 求商,留余數(shù),照這個思路走。檢驗的時候,一樣,把 2n把2 替換成 8即可。

看代碼:

和 二進(jìn)制 的基本沒啥卻別

# 十進(jìn)制轉(zhuǎn)八進(jìn)制
def dec_to_oct(num):
 l = []
 if num0:
 return "-"+ dec_to_bin(abs(num)) # 如過是負(fù)數(shù),先轉(zhuǎn)換成正數(shù)
 while True:
 num, reminder = divmod(num,8) # 短除法,對2求,分別得到除數(shù) 和 余數(shù)、
 l.append(str(reminder)) # 把獲得的余數(shù) 存入字符串
 if num == 0:
 return "".join(l[::-1]) # 對列表中的字符串進(jìn)行逆序拼接,得到一個二進(jìn)制字符串

3.3 十進(jìn)制轉(zhuǎn)十六進(jìn)制

前面說過,十六進(jìn)制相比二進(jìn)制,八進(jìn)制會復(fù)雜一點,但是方法是一樣的

# 十進(jìn)制轉(zhuǎn)十六進(jìn)制(這個相對麻煩一點,因為,十六進(jìn)制包含 A-F,大小寫不敏感)
def dec_to_hex(num):
 base = [str(x) for x in range(10)] +[chr(x) for x in range(ord('A'),ord("A")+6)] # 前者把 0 ~ 9 轉(zhuǎn)換成字符串存進(jìn)列表 base 里,后者把 A ~ F 存進(jìn)列表
 l = []
 if num0:
 return "-"+dec_to_hex(abs(num))
 while True:
 num,rem = divmod(num,16) # 求商 和 留余數(shù)
 l.append(base[rem])
 if num == 0:
 return "".join(l[::-1])

最后看一下運行結(jié)果,是不是很方便呢?當(dāng)然 Python 有內(nèi)置的方法,比如我們直接輸入 十進(jìn)制數(shù),通過 bin(n) 轉(zhuǎn)為二進(jìn)制,oct(n) 轉(zhuǎn)為 八進(jìn)制,hex(n) 轉(zhuǎn)為十六進(jìn)制。但是原理了解以下還是很有必要的,你說是不是呢?

到此這篇關(guān)于一篇教程教你學(xué)會Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)的文章就介紹到這了,更多相關(guān)Python進(jìn)制轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Java之實現(xiàn)十進(jìn)制與十六進(jìn)制轉(zhuǎn)換案例講解
  • C# 進(jìn)制轉(zhuǎn)換的實現(xiàn)(二進(jìn)制、十六進(jìn)制、十進(jìn)制互轉(zhuǎn))
  • 淺談java二進(jìn)制、十進(jìn)制、十六進(jìn)制、字符串之間的相互轉(zhuǎn)換
  • 科學(xué)知識:二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制轉(zhuǎn)換
  • 十進(jìn)制與BCD碼轉(zhuǎn)換的算法詳解

標(biāo)簽:安康 長沙 山西 海南 山西 濟南 喀什 崇左

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《一篇教程教你學(xué)會Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    西贡区| 米易县| 松溪县| 吐鲁番市| 宣城市| 浦东新区| 上林县| 广饶县| 韶山市| 佛冈县| 临泽县| 安顺市| 迭部县| 句容市| 巨鹿县| 比如县| 昭觉县| 合川市| 新疆| 如皋市| 漾濞| 孝感市| 印江| 日照市| 龙门县| 呼玛县| 临武县| 平和县| 东乌| 青岛市| 平阴县| 永和县| 拉孜县| 英吉沙县| 农安县| 万源市| 宁武县| 柳江县| 图们市| 繁峙县| 益阳市|