Python — 十進位與二進位間的轉換(Decimal to Binary)

在進行演算法的實現時,有時會需要用到二進位的演算,這時要如何將數字從十進位轉換成二進位就成了一個頭痛的問題,本文筆者會用簡易的代碼實現兩者之間的轉換。

https://www.flickr.com/photos/christiaancolen/20607150556

筆者在寫基因演算法時,需要用到二進位數值的演算,所以就稍微上網惡補了原理以及算法,想到有可能很多人在寫演算法時也會因此而頭痛,所以就做了一個簡單的整理供大家參考。

以下不會特別說明二進位轉換的數學原理,只會針對代碼部份去做解析,故在閱讀前,就應具備基本的進位轉換常識。

在本文,你將會學會以下python技巧:
1.十進位轉成二進位
2.二進位轉成十進位
3.包含整數、浮點數的轉換
4.分析問題的能力

以下正文開始:

本文筆者會分別針對十進位轉二進位(Decimal to Binary)二進位轉十進位(Binary to Decimal),建立相對應的function,並且在最後驗證其準確性。

廢話不多說,直接附上代碼:

Decimal to Binary:
def DecToBin_machine(num,accuracy):
integer = int(num)
flo = num - integer
integercom = '{:02b}'.format(integer)
tem = flo
flo_list = []
for i in range(accuracy):
tem *= 2
flo_list += str(int(tem))
tem -= int(tem)
flocom = flo_list
binary_value = integercom + '.' + ''.join(flocom)
return binary_value
Binary to Decimal:
def BinToDec_machine(num_,flo):
decimal_value = []
cut_num = num_.split('.')
int_ = 2**1*int(cut_num[0][0])+2**0*int(cut_num[0][1])
float_ = 0
x = 1
for i in range(-1,(-(len(cut_num[1])+1)),-1):
float_ += 2**i*int(cut_num[1][i+x])
x += 2
whole_num = round(int_+float_,flo)
decimal_value.append(whole_num)
return decimal_value

注意:flo 指的是二進位值轉換成十進位後,所代表的小數點位數。

驗證:隨機生成一 0~1 的數字,並將其帶入function驗證,因為筆者使用需要,故此function只適合帶入 0~1 的數字,若讀者有需求要轉換更大的數字,可進行更改,在這裡只提供基本的代碼。

  • flo_num:十進位值中代表小數的位數,以下以 3 作為示範。
  • accuracy:二進位值中以固定個數表示小數的值,會放在轉換後的 ” . ” 後面,若上述條件以 3 為例,則放入3*5會較保險 。(若要轉換不同位數,可以自行嘗試)
  • 記得注意output後的資料型態!筆者為了方便大家閱讀,分別轉換成str和list型態做演示。

十進位、二進位轉換的原理

--

--