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