一篇教程教你學(xué)會(huì)Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
一、導(dǎo)言
導(dǎo)語(yǔ):
在計(jì)算機(jī)進(jìn)行數(shù)據(jù)交換時(shí),常常會(huì)有一個(gè)進(jìn)制轉(zhuǎn)換的過(guò)程,我們知道計(jì)算機(jī)只認(rèn)0 和 1.在內(nèi)存系統(tǒng)中,基本基于二進(jìn)制進(jìn)行運(yùn)算的,但是有時(shí)候數(shù)據(jù)過(guò)于龐大,為了方便存儲(chǔ)管理,計(jì)算機(jī)會(huì)使用十六進(jìn)制存儲(chǔ)數(shù)據(jù),但是怎么實(shí)現(xiàn)數(shù)據(jù)轉(zhuǎn)換呢?
我們?nèi)祟?lèi)由十根手指頭,所以自然就使用十進(jìn)制啦,每當(dāng)我們數(shù)數(shù)字到10之后,于是就重0 開(kāi)始繼續(xù)數(shù),所以逢十進(jìn)一就這么來(lái)了。
對(duì)于其它進(jìn)制呢,也是同樣的,比如最常見(jiàn)的二進(jìn)制,也就是逢二進(jìn)一,慢慢來(lái),依次類(lèi)推,所以數(shù)學(xué)的世界是多么的奇妙呀!
今天給大家?guī)?lái)的是使用 Python 實(shí)現(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)制,其實(shí)是從 0 開(kāi)始,數(shù)到 9 之后,就跳到 10,這樣就變成了 10,數(shù)數(shù)大家總會(huì)把
二進(jìn)制(Binary)
二進(jìn)制同理,從 0 開(kāi)始也就是 00(前面的一個(gè)0可以省去,但是為了更好的描述,所以保留),到 01,也變成了 10【對(duì)應(yīng)十進(jìn)制中的 3】,然后是 11【對(duì)應(yīng)十進(jìn)制中的 4】,100【十進(jìn)制中的5】。。。以此類(lèi)推
因?yàn)?二進(jìn)制 的英文單詞是 binary,所以在計(jì)算機(jī)運(yùn)算的過(guò)程中,使用二進(jìn)制會(huì)用如下方法,0b11(4),0b1101(13)等等
八進(jìn)制(Octal)
理解了二進(jìn)制,在理解八進(jìn)制就很容易了,八進(jìn)制是逢八進(jìn)一,范圍是 0~7,對(duì)比一下二進(jìn)制,就很好理解啦??!
十六進(jìn)制(Hexadecimal)
十六進(jìn)制就可能會(huì)相對(duì)復(fù)雜一點(diǎn)點(diǎn),十六進(jìn)制是用數(shù)字 0~9 和 英文字母 A - F(大小寫(xiě)隨意) 表示,因此 A代表 10, F代表 15。為什么在計(jì)算機(jī)領(lǐng)域中,十六進(jìn)制用途會(huì)如此廣泛呢?
給大家看一個(gè)對(duì)比:
當(dāng)數(shù)據(jù)比較大的時(shí)候,二進(jìn)制顯然不再那么使用,再看使用十六進(jìn)制,就簡(jiǎn)短很多。
十六進(jìn)制的運(yùn)用領(lǐng)域可不止如此,比如原畫(huà)師調(diào)色的時(shí)候,如果使用 RGB 三原色的話(huà),那就會(huì)有 256 x 256 x 256 種組合,我們就可以使用十六進(jìn)制,把每一種顏色對(duì)比轉(zhuǎn)換成 十六進(jìn)制字符,就會(huì)方便很多,以下是我之前調(diào)色的時(shí)候?qū)懙囊粋€(gè)很簡(jiǎn)單一個(gè) C 語(yǔ)言小程序,呃,似乎有點(diǎn)跑題了,哈哈,不管了
#include<stdio.h> #include<stdlib.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)制
我記得不太清楚是啥時(shí)候第一次學(xué)進(jìn)制轉(zhuǎn)換的,進(jìn)制轉(zhuǎn)換常用的方法就是對(duì) 2 取余數(shù),然后得到余數(shù)反轉(zhuǎn)連在一起就是 我們所需要的二進(jìn)制,舉個(gè)例子,比如我要計(jì)算 十進(jìn)制數(shù) 13 的 二進(jìn)制是多少?
這也是老師教我們的方法,也是我們第一次接觸進(jìn)制轉(zhuǎn)換的時(shí)候,用目標(biāo)數(shù) num 對(duì) 2求 余數(shù),直到 商為 0 的時(shí)候,結(jié)束,然后將余數(shù)反向組合輸出,及為我們所求的 2 進(jìn)制數(shù)。有的同學(xué)會(huì)問(wèn),我怎么就能這么確定這就是 13 對(duì)應(yīng)的 2 進(jìn)制數(shù)呢?
答曰:
由于二進(jìn)制的特殊性,數(shù)字從右邊往左邊數(shù),依次對(duì)應(yīng) 20 x 1 + 21 x 0 + 22x 1 + 23 x 1 = 1 +4 +8 = 13, 給大家一個(gè)速記口訣,1,2,4,8,16,32,64,128,256,512,1024。分別是 20~ 210對(duì)應(yīng)的值
所以有了思路,我們就可以愉快的敲代碼了
# 十進(jìn)制整數(shù)轉(zhuǎn)二進(jìn)制 def dec_to_bin(num): #函數(shù)名做到見(jiàn)其名知其意 l = [] # 創(chuàng)建一個(gè)空列表 if num<0: # 是負(fù)數(shù)轉(zhuǎn)換成整數(shù) return "-"+ dec_to_bin(abs()) # 如過(guò)是負(fù)數(shù),先轉(zhuǎn)換成正數(shù) while True:
num, reminder = divmod(num,2) # 短除法,對(duì)2求,分別得到除數(shù) 和 余數(shù)、這是 Python 的特有的一個(gè)內(nèi)置方法,分別可以到商 及 余數(shù)
l.append(str(reminder)) # 把獲得的余數(shù) 存入字符串
if num == 0: # 對(duì)應(yīng)了前面的話(huà),當(dāng)商為 0時(shí),就結(jié)束啦
return “”.join(l[::-1]) # 對(duì)列表中的字符串進(jìn)行逆序拼接,得到一個(gè)二進(jìn)制字符串
3.2 十進(jìn)制轉(zhuǎn)八進(jìn)制
理解了二進(jìn)制的轉(zhuǎn)換,八進(jìn)制一樣不難。同樣是目標(biāo)數(shù) num對(duì)八 求商,留余數(shù),照這個(gè)思路走。檢驗(yàn)的時(shí)候,一樣,把 2n把2 替換成 8即可。
看代碼:
和 二進(jìn)制 的基本沒(méi)啥卻別
# 十進(jìn)制轉(zhuǎn)八進(jìn)制 def dec_to_oct(num): l = [] if num<0: return "-"+ dec_to_bin(abs(num)) # 如過(guò)是負(fù)數(shù),先轉(zhuǎn)換成正數(shù) while True: num, reminder = divmod(num,8) # 短除法,對(duì)2求,分別得到除數(shù) 和 余數(shù)、 l.append(str(reminder)) # 把獲得的余數(shù) 存入字符串 if num == 0: return "".join(l[::-1]) # 對(duì)列表中的字符串進(jìn)行逆序拼接,得到一個(gè)二進(jìn)制字符串
3.3 十進(jìn)制轉(zhuǎn)十六進(jìn)制
前面說(shuō)過(guò),十六進(jìn)制相比二進(jìn)制,八進(jìn)制會(huì)復(fù)雜一點(diǎn),但是方法是一樣的
# 十進(jìn)制轉(zhuǎn)十六進(jìn)制(這個(gè)相對(duì)麻煩一點(diǎn),因?yàn)?,十六進(jìn)制包含 A-F,大小寫(xiě)不敏感) 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 num<0: 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])
最后看一下運(yùn)行結(jié)果,是不是很方便呢?當(dāng)然 Python 有內(nèi)置的方法,比如我們直接輸入 十進(jìn)制數(shù),通過(guò) bin(n) 轉(zhuǎn)為二進(jìn)制,oct(n) 轉(zhuǎn)為 八進(jìn)制,hex(n) 轉(zhuǎn)為十六進(jìn)制。但是原理了解以下還是很有必要的,你說(shuō)是不是呢?
到此這篇關(guān)于一篇教程教你學(xué)會(huì)Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)的文章就介紹到這了,更多相關(guān)Python進(jìn)制轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python 內(nèi)置函數(shù)進(jìn)制轉(zhuǎn)換的用法(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
- Python二進(jìn)制串轉(zhuǎn)換為通用字符串的方法
- Python 字符串與二進(jìn)制串的相互轉(zhuǎn)換示例
- Python中不同進(jìn)制互相轉(zhuǎn)換(二進(jìn)制、八進(jìn)制、十進(jìn)制和十六進(jìn)制)
- Python 16進(jìn)制與中文相互轉(zhuǎn)換的實(shí)現(xiàn)方法
- python實(shí)現(xiàn)各進(jìn)制轉(zhuǎn)換的總結(jié)大全
- python中常見(jiàn)進(jìn)制之間的轉(zhuǎn)換方式
- python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點(diǎn)數(shù))
- Python中不同進(jìn)制間的轉(zhuǎn)換實(shí)現(xiàn)
相關(guān)文章
用Python3通過(guò)PyCharm上傳代碼到Git服務(wù)器的詳細(xì)過(guò)程
上傳代碼到服務(wù)器,如果不知道的情況下還用傳統(tǒng)的方式上傳很麻煩,現(xiàn)在很多IDE都提供上傳代碼的功能,例如:VSCode,PyCharm等等,本文講解的是PyCharm,需要的朋友可以參考下2024-03-03Python xml、字典、json、類(lèi)四種數(shù)據(jù)類(lèi)型如何實(shí)現(xiàn)互相轉(zhuǎn)換
這篇文章主要介紹了Python xml、字典、json、類(lèi)四種數(shù)據(jù)類(lèi)型如何實(shí)現(xiàn)互相轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Python Web框架Django的模型和數(shù)據(jù)庫(kù)遷移詳解
Django 是一個(gè)極其強(qiáng)大的 Python Web 框架,它提供了許多工具和特性,能夠幫助我們更快速、更便捷地構(gòu)建 Web 應(yīng)用,在本文中,我們將會(huì)關(guān)注 Django 中的模型(Models)和數(shù)據(jù)庫(kù)遷移(Database Migrations)這兩個(gè)核心概念,需要的朋友可以參考下2023-08-08python中三種輸出格式總結(jié)(%,format,f-string)
在Python語(yǔ)言編程中,我們會(huì)與字符串打交道,那務(wù)必會(huì)輸出字符串來(lái)查看字符串的內(nèi)容,下面這篇文章主要給大家介紹了關(guān)于python中三種輸出格式的相關(guān)資料,三種格式分別是%,format,f-string,需要的朋友可以參考下2022-03-03使用django-guardian實(shí)現(xiàn)django-admin的行級(jí)權(quán)限控制的方法
這篇文章主要介紹了使用django-guardian實(shí)現(xiàn)django-admin的行級(jí)權(quán)限控制的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-10-10如何將tensorflow訓(xùn)練好的模型移植到Android (MNIST手寫(xiě)數(shù)字識(shí)別)
這篇文章主要介紹了將tensorflow訓(xùn)練好的模型移植到Android (MNIST手寫(xiě)數(shù)字識(shí)別),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04python tornado上傳文件功能實(shí)現(xiàn)(前端和后端)
Tornado 是一個(gè)功能強(qiáng)大的 Web 框架,除了基本的請(qǐng)求處理能力之外,還提供了一些高級(jí)功能,在 Tornado web 框架中,上傳圖片通常涉及創(chuàng)建一個(gè)表單,讓用戶(hù)選擇文件并上傳,本文介紹tornado上傳文件功能,感興趣的朋友一起看看吧2024-03-03Python使用pyautogui模塊實(shí)現(xiàn)自動(dòng)化鼠標(biāo)和鍵盤(pán)操作示例
這篇文章主要介紹了Python使用pyautogui模塊實(shí)現(xiàn)自動(dòng)化鼠標(biāo)和鍵盤(pán)操作,簡(jiǎn)單描述了pyautogui模塊的功能,并結(jié)合實(shí)例形式較為詳細(xì)的分析了Python使用pyautogui模塊實(shí)現(xiàn)鼠標(biāo)與鍵盤(pán)自動(dòng)化操作相關(guān)技巧,需要的朋友可以參考下2018-09-09