數制轉換,python實現

2021-10-02 20:04:32 字數 2621 閱讀 7236

在學數電的時候用到的

數碼用於表示數量的大小,其規則為 數制

數碼用於表示不同事物或事物的不同狀態,其規則為碼制

數字(r進製)的按權展開式即為

d =∑

i=1n

ki∗r

iki∈

(0,1

……r)

d=\sum_^n k_i * r^i \quad \quad k_i\in (0,1…… r)

d=i=1∑

n​ki

​∗ri

ki​∈

(0,1

……r)

其中k

ik_i

ki​為數碼,r為基數,r

ir^i

ri為權值十進位制(d) decimalism

二進位制(b) binary

八進位制(o) octal

十六進製制(h) hexadecimal

def

x_to_d

(x:int

,a:str):

#把x進制度數轉化為10進製

a=str(a)

length =

len(a)

ans=

0for i in

range(0

,length,1)

:iford(a[i]

)>=

ord(

'a')

andord

(a[i]

)<=

ord(

'e')

:b=ord

(a[i])-

ord(

'a')+10

elif

ord(a[i]

)>=

ord(

'a')

andord

(a[i]

)<=

ord(

'e')

:b=ord

(a[i])-

ord(

'a')+10

else

: b=

(int

)(a[i]

) ans=ans*x+b

print

("%d進製數%s 轉為 10進製數%d"

%(x,a,ans)

)return ans

def

d_to_x

(x:int

,a:int):

#把十進位制數轉化為x進製數

#使用的方法是從後往前,不斷取餘

ori=a

ans=

''while a>0:

if(a%x)

>

10: b=

chr(

ord(

'a')

+a%x)

else

:b=chr

(ord

('0'

)+a%x)

ans+=b

a//=x

ans=ans[::

-1]print

("10進製數%d 轉為 %d進製數%s"

%(ori, x,ans)

)return ans

方法是「乘2取整,順序排列」

#a表示要轉換的float數, r 表示要保留幾位,

ori=a

ans=d_to_x(

2,a)

a=a-

(int

)(a)

ans+=

'.'for i in

range

(r):

a=a*

2 ans+=

chr(

(int

)(a)

+ord

('0'))

a-=(int

)(a)

print

("float型10進製數%f 轉為 2進製數%s"

%(ori, ans)

)三.碼制

補碼存在的意義:正數的補碼就是其本身

負數的補碼就是在其原碼的基礎上,符號位不變,取反後加一。

補碼存在的意義就是為了統一計算機加減

比如(7)+(-7)=0

7 -> 0000 0111(7的補碼)

-7 -> 1111 1001(-7的補碼)

所以相加為1 0000 0000(超出的最高位預設去掉)

比如(2)+(-3)=(-1)

2 -> 0000 0010 (2的補碼)

-3 -> 1111 1101 (-3的補碼)

相加為 1111 1111(-1的補碼)

這樣我們就可以在減法運算的時候,把數化為補碼進行計算,這樣就在計算時統一了加減。

向最高位進1和符號位不同,故是錯誤的。

Python棧實現數制轉換

數值轉換的原理是整除取餘,但是計算得出的順序和輸出的順序是相反的 即先算出的結果在最低位,此時就需要使用棧來儲存運算結果 def transform x int a int 輸入要轉換的數字以及目標進製輸出轉換後的字串 param x 要轉換的數字 param a 進製 return 字串 asse...

順序棧實現數制轉換

include include define stacksize 100 假定預分配的棧空間最多為100個元素 typedef int datatype 應將順序棧的datatype定義改為整型 typedef struct seqstack void main void initstack seq...

用棧實現數制轉換(java)

十進位制數n和其他d進製數的轉換時計算機實現計算的基本問題,其解決方法很多,其中乙個簡單的演算法基於以下原理 n n div d d n mod d 例如 十進位制數 1348 的八進位制數為 2504 運算過程如下 nn div 8 n mod 8 1348168 4 16821 0 212 5 ...