数制
一.数制与码制的区别
数码用于表示数量的大小,其规则为 数制
数码用于表示不同事物或事物的不同状态,其规则为码制
二.数制
1.规则
数字(R进制)的按权展开式即为
其中 为数码,R为基数, 为权值
2.常用:
十进制(D) decimalism
二进制(B) binary
八进制(O) octal
十六进制(H) hexadecimal
3.不同数制之间的转换
(1)X进制转为十进制
def X_to_D(X:int,a:str):
#把X进制度数转化为10进制
a=str(a)
length =len(a)
ans=0
for i in range(0,length,1):
if ord(a[i]) >= ord('A') and ord(a[i]) <= ord('E'):b=ord(a[i])-ord('A')+10
elif ord(a[i]) >= ord('a') and ord(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
(2)十进制转为X进制
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
(3)十进制小数转二进制
方法是“乘2取整,顺序排列”
def dec_D_to_X(a:float,R:int):
#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和符号位不同,故是错误的。