Python中不同進(jìn)制間的轉(zhuǎn)換實現(xiàn)
一、不同進(jìn)制在計算機(jī)科學(xué)、數(shù)學(xué)和其他領(lǐng)域中具廣泛的應(yīng)用
以下是一些常見的應(yīng)用:
1. 二進(jìn)制(base-2): 在計算機(jī)系統(tǒng)中,數(shù)據(jù)以二進(jìn)制形式存儲和處理。二進(jìn)制由0和1組成,是數(shù)字電子技術(shù)的基礎(chǔ)。
2. 十進(jìn)制(base-10): 十進(jìn)制是我們平常使用的數(shù)字系統(tǒng),它由0到9這些數(shù)字組成。十進(jìn)制在日常生活中用于計算和表示數(shù)量。
3. 八進(jìn)制(base-8) 八進(jìn)制使用0到7這幾個數(shù)字表示數(shù)值。它在計算機(jī)編程中經(jīng)常用于表達(dá)特殊位模式、字節(jié)權(quán)限和文件權(quán)限等。
4.十六進(jìn)制(base-16): 十六進(jìn)制使用0到9的數(shù)字和A到F的六個字母表示數(shù)值。它在計算機(jī)科學(xué)中被廣泛用于表達(dá)內(nèi)存地址、顏色代碼和二進(jìn)制數(shù)據(jù)的可讀形式。
進(jìn)制轉(zhuǎn)換: 在計算機(jī)科學(xué)中,需要進(jìn)行不同進(jìn)制之間的轉(zhuǎn)換。例如,將十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制或十六進(jìn)制,或者將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制。
除了上述應(yīng)用外,進(jìn)制還在信息理論、密碼學(xué)、邏輯電路設(shè)計和圖形處理等領(lǐng)域中發(fā)揮著重要作用。進(jìn)制概念的靈活運(yùn)用可以增強(qiáng)數(shù)據(jù)表示和處理的效率,以及解決特定問題所需的編程技巧。
二、在Python中,可以使用以下函數(shù)進(jìn)行不同進(jìn)制之間的轉(zhuǎn)換
1.bin(): 將整數(shù)轉(zhuǎn)換為二進(jìn)制字符串。
print(bin(10)) # 輸出: '0b1010'
2.oct(): 將整數(shù)轉(zhuǎn)換為八進(jìn)制字符串。
print(oct(10)) # 輸出: '0o12'
3.hex(): 將整數(shù)轉(zhuǎn)換為十六進(jìn)制字符串。
print(hex(10)) # 輸出: '0xa'
4.int(): 將字符串按指定進(jìn)制轉(zhuǎn)換為整數(shù)。
print(int(1010,2)) # 輸出: 10 print(int(1010,8)) # 輸出: 10 print(int('a',16)) # 輸出: 10
這些函數(shù)可用于在不同進(jìn)制之間轉(zhuǎn)換數(shù)字。bin()、oct()和 hex()函數(shù)將整數(shù)轉(zhuǎn)換為相應(yīng)進(jìn)制的字符串,而 int()函數(shù)將指定進(jìn)制字符串轉(zhuǎn)換為整數(shù)。
三、在Python直接使用函數(shù)進(jìn)行進(jìn)制轉(zhuǎn)換非常方便快捷
但對于初學(xué)者來說,還是要認(rèn)真學(xué)習(xí)進(jìn)制轉(zhuǎn)換的底層運(yùn)算原理。
將十進(jìn)制數(shù)轉(zhuǎn)換為任意進(jìn)制(base)的原理是取余操作。首先,我們從給定的十進(jìn)制數(shù)開始。然后,通過連續(xù)地進(jìn)行“整除并記錄余數(shù)”的操作,獲得在指定進(jìn)制下各個位上的數(shù)字或字符。這個過程持續(xù)到十進(jìn)制數(shù)變?yōu)?為止。
具體操作步驟如下:
1. 將給定的十進(jìn)制數(shù)除以指定的進(jìn)制(base),并記錄所得的商和余數(shù)。
2. 將余數(shù)對應(yīng)的數(shù)字(如果是大于9的數(shù)字,則對應(yīng)于字母)作為 base 進(jìn)制數(shù)的最低位值。
3. 將商繼續(xù)除以指定進(jìn)制,并將該步驟中得到的余數(shù)添加到首位。重復(fù)此步驟直到商變?yōu)榱恪?br />4. 得到的結(jié)果就是將十進(jìn)制數(shù)轉(zhuǎn)換為 base 進(jìn)制的表達(dá)形式。
例如,將十進(jìn)制數(shù) 10 轉(zhuǎn)換為二進(jìn)制(base=2),我們可以執(zhí)行以下步驟:
10 ÷ 2 = 5 余 0 0
5 ÷ 2 = 2 余 1 10
2 ÷ 2 = 1 余 0 010
1 ÷ 2 = 0 余 1 1010
從最后一步開始,我們依次讀取每個余數(shù),結(jié)果就是二進(jìn)制數(shù) 1010。因此,10二進(jìn)制表示為 1010。
同樣的原理適于將十進(jìn)制數(shù)轉(zhuǎn)換為任意指定的 base 進(jìn)制。根據(jù)不同的進(jìn)制,可使用不同的數(shù)字或字符表示位值。這種整除和取余的方法使我們能夠在將任意十進(jìn)制數(shù)轉(zhuǎn)換為各種進(jìn)制時進(jìn)行有效的計算和轉(zhuǎn)換。
以下是使用循環(huán)手動實現(xiàn)進(jìn)制轉(zhuǎn)換的示例代碼:
# 將10進(jìn)制數(shù)decimal轉(zhuǎn)換為base進(jìn)制的函數(shù) def decimal_to_base(decimal, base): if not isinstance(decimal, int) or not isinstance(base, int) or base < 2: raise ValueError("Invalid inputs") # 檢查輸入是否有效,如果無效則引發(fā)異常 digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存儲各個位上的數(shù)字或字母 if decimal == 0: return '0' # 如果十進(jìn)制數(shù)為0,則直接返回字符串'0' result = '' negative = False if decimal < 0: negative = True decimal = abs(decimal) # 處理負(fù)數(shù)情況,轉(zhuǎn)換為正數(shù)進(jìn)行計算 while decimal > 0: remainder = decimal % base # 取余數(shù) result = digits[remainder] + result # 將余數(shù)對應(yīng)的字符拼接到結(jié)果字符串的左側(cè)(考慮進(jìn)制轉(zhuǎn)換后順序倒過來) decimal = decimal // base # 整除以進(jìn)行下一位的計算 if negative: result = '-' + result # 如果原始數(shù)是負(fù)數(shù),則在結(jié)果字符串前添加負(fù)號 return result # 返回轉(zhuǎn)換后的結(jié)果字符串 # 調(diào)用函數(shù)進(jìn)行測試 print(decimal_to_base(10597059, 16)) #輸出結(jié)果:A1B2C3 print(decimal_to_base(10597059, 8) #輸出結(jié)果:50331303 print(decimal_to_base(10597059, 2)) #輸出結(jié)果:101000011011001011000011
以上函數(shù)可以將一個十進(jìn)制數(shù)轉(zhuǎn)換為任意指定進(jìn)制的字符串表示形式。只需傳遞要轉(zhuǎn)換的十進(jìn)制數(shù)和目標(biāo)進(jìn)制作為參數(shù)即可。
將任意進(jìn)制(base)數(shù)轉(zhuǎn)換為十進(jìn)制的原理是加權(quán)求和。從給定的 base 進(jìn)制數(shù)的最低位開始,將每個位的值乘以對應(yīng)的權(quán)重,并對所有位的結(jié)果進(jìn)行累加。權(quán)重由 base 的冪決定,從右到左逐漸遞增。
具體的步驟如下:
1. 從給定的 base 進(jìn)制數(shù)的最低位開始,將每個位的值與重相乘。
2. 對所有位的乘積求和,得到最終的十進(jìn)制表示。
例如,將二進(jìn)制數(shù) 1010 轉(zhuǎn)換為十進(jìn)制,可以執(zhí)行以下步驟:
(1 * 2^3) + (0 * 2^2) + (1 * 2^1) + (0 * 2^0)
= 8 + 0 + 2 + 0
= 10
因此,二進(jìn)制數(shù) 1010 在十進(jìn)制表示為 10。
同樣的原理適用于將任意指定的 base 進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制。根據(jù)每個位上的值和對應(yīng)的權(quán)重,可以通過加權(quán)求和的方法有效地計算和轉(zhuǎn)換為十進(jìn)制。這種加權(quán)求和的方法使我們能夠在將各種進(jìn)制轉(zhuǎn)換為十進(jìn)制時進(jìn)行有效的計算和轉(zhuǎn)換。
以下是使用循環(huán)手動實現(xiàn)將任意進(jìn)制轉(zhuǎn)換為10進(jìn)制的代碼:
# 將base進(jìn)制數(shù)number轉(zhuǎn)換為10進(jìn)制的函數(shù) def base_to_decimal(number, base): if not isinstance(number, str) or not isinstance(base, int) or base < 2: raise ValueError("Invalid inputs") # 檢查輸入是否有效,如果無效則引發(fā)異常 digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" # 存各個位上的數(shù)字或字母 number = number.upper() # 將輸入的字符串轉(zhuǎn)換為大寫,以便與 digits 字符串中的字符進(jìn)行匹配 decimal = 0 # 初始化十進(jìn)制數(shù)為0 power = 0 # 初始化權(quán)重(指數(shù))為0 for digit in reversed(number): # 對于從右到左的每個數(shù)字字符 if digit not in digits or digits.index(digit) >= base: raise ValueError("Invalid input") # 如果字符不在 digits 中或其索引超過等于指定 base 的范圍,則引發(fā)異常 decimal += digits.index(digit) * (base ** power) # 將該位上的值乘以權(quán)重,并將其累加到當(dāng)前的十進(jìn)制數(shù)中 power += 1 # 增加權(quán)重(指數(shù)) return decimal # 返回轉(zhuǎn)換后的十進(jìn)制數(shù) # 調(diào)用函數(shù)進(jìn)行測試 print(base_to_decimal("A1B2C3", 16)) #輸出結(jié)果:10597059 print(base_to_decimal("50331303", 8)) #輸出結(jié)果:10597059 print(base_to_decimal("101000011011001011000011", 2)) #輸出結(jié)果:10597059
以上函數(shù)可以將任意進(jìn)制的數(shù)字字符串轉(zhuǎn)換為十進(jìn)制。只需傳遞要轉(zhuǎn)換的數(shù)字和當(dāng)前進(jìn)制作為參數(shù)即可。
到此這篇關(guān)于Python中不同進(jìn)制間的轉(zhuǎn)換實現(xiàn)的文章就介紹到這了,更多相關(guān)Python 不同進(jìn)制間的轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(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)換的實現(xiàn)方法
- python實現(xiàn)各進(jìn)制轉(zhuǎn)換的總結(jié)大全
- python中常見進(jìn)制之間的轉(zhuǎn)換方式
- python十進(jìn)制和二進(jìn)制的轉(zhuǎn)換方法(含浮點數(shù))
- 一篇教程教你學(xué)會Python進(jìn)制轉(zhuǎn)換(十進(jìn)制轉(zhuǎn)二進(jìn)制、八進(jìn)制、十六進(jìn)制)
相關(guān)文章
python單例模式之selenium driver實現(xiàn)單例
這篇文章主要介紹了python單例模式之selenium driver實現(xiàn)單例,使用裝飾器實現(xiàn)單例,文章基于python的相關(guān)資料實現(xiàn)主題,具有一的的參考價值,需要的朋友可以參考一下2022-03-03python利用itertools生成密碼字典并多線程撞庫破解rar密碼
這篇文章主要介紹了python利用itertools生成密碼字典并多線程撞庫破解rar密碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08如何利用pandas將Excel轉(zhuǎn)為html格式
工作中經(jīng)常會遇到Excel轉(zhuǎn)為html格式這種需求,下面這篇文章主要給大家介紹了關(guān)于如何利用pandas將Excel轉(zhuǎn)為html格式的相關(guān)資料,主要利用的是pd.to_html,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08python中pandas對多列進(jìn)行分組統(tǒng)計的實現(xiàn)
分組統(tǒng)計在很多時候都需要用到,可以實現(xiàn)很多數(shù)據(jù)庫函數(shù)的功能。本文主要介紹了python中pandas對多列進(jìn)行分組統(tǒng)計的實現(xiàn),感興趣的可以了解一下2021-06-06Python 中對 XML 文件的編碼轉(zhuǎn)換問題
這篇文章主要介紹了Python 中對 XML 文件的編碼轉(zhuǎn)換問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03python實現(xiàn)對列表中的元素進(jìn)行倒序打印
今天小編就為大家分享一篇python實現(xiàn)對列表中的元素進(jìn)行倒序打印,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11pygame實現(xiàn)井字棋之第二步邏輯實現(xiàn)
這篇文章主要介紹了pygame實現(xiàn)井字棋之第二步邏輯實現(xiàn),文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-05-05