Python 實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換一、導(dǎo)言導(dǎo)語:
我們?nèi)祟愑墒种割^,所以自然就使用十進(jìn)制啦,每當(dāng)我們數(shù)數(shù)字到10之后,于是就重0 開始繼續(xù)數(shù),所以逢十進(jìn)一就這么來了。 對(duì)于其它進(jìn)制呢,也是同樣的,比如最常見的二進(jìn)制,也就是逢二進(jìn)一,慢慢來,依次類推,所以數(shù)學(xué)的世界是多么的奇妙呀! 今天給大家?guī)淼氖鞘褂?Python 實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換,內(nèi)容包括如下:
二、各種進(jìn)制介紹在轉(zhuǎn)換之前,我們先了解以下各種進(jìn)制 十進(jìn)制(Decimal) 我們所熟知的十進(jìn)制,其實(shí)是從 0 開始,數(shù)到 9 之后,就跳到 10,這樣就變成了 10,數(shù)數(shù)大家總會(huì)把 二進(jìn)制(Binary) 二進(jìn)制同理,從 0 開始也就是 00(前面的一個(gè)0可以省去,但是為了更好的描述,所以保留),到 01,也變成了 10【對(duì)應(yīng)十進(jìn)制中的 3】,然后是 11【對(duì)應(yīng)十進(jìn)制中的 4】,100【十進(jìn)制中的5】。。。以此類推 因?yàn)?二進(jìn)制 的英文單詞是 binary,所以在計(jì)算機(jī)運(yùn)算的過程中,使用二進(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(大小寫隨意) 表示,因此 A代表 10, F代表 15。為什么在計(jì)算機(jī)領(lǐng)域中,十六進(jìn)制用途會(huì)如此廣泛呢? 給大家看一個(gè)對(duì)比: 當(dāng)數(shù)據(jù)比較大的時(shí)候,二進(jìn)制顯然不再那么使用,再看使用十六進(jìn)制,就簡(jiǎn)短很多。
#include<stdio.h> 三、使用 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ì)問,我怎么就能這么確定這就是 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ù)名做到見其名知其意 l = [] # 創(chuàng)建一個(gè)空列表 if num<0: # 是負(fù)數(shù)轉(zhuǎn)換成整數(shù) return "-"+ dec_to_bin(abs()) # 如過是負(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)了前面的話,當(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)制 的基本沒啥卻別 # 十進(jìn)制轉(zhuǎn)八進(jìn)制 3.3 十進(jìn)制轉(zhuǎn)十六進(jìn)制 前面說過,十六進(jìn)制相比二進(jìn)制,八進(jìn)制會(huì)復(fù)雜一點(diǎn),但是方法是一樣的 # 十進(jìn)制轉(zhuǎn)十六進(jìn)制(這個(gè)相對(duì)麻煩一點(diǎn),因?yàn)椋M(jìn)制包含 A-F,大小寫不敏感) 最后看一下運(yùn)行結(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)制。但是原理了解以下還是很有必要的,你說是不是呢? 好啦,今天的Python學(xué)習(xí)教程內(nèi)容講到這,你學(xué)會(huì)了嘛 |
|