在學數電的時候用到的數碼用於表示數量的大小,其規則為 數制
數碼用於表示不同事物或事物的不同狀態,其規則為碼制
數字(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∑
nki
∗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)
("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 ...