@数电:数制

数制

一.数制与码制的区别

数码用于表示数量的大小,其规则为 数制

数码用于表示不同事物或事物的不同状态,其规则为码制

二.数制

1.规则

数字(R进制)的按权展开式即为

D = i = 1 n K i R i K i ( 0 , 1 R ) D=\sum_{i=1}^n K_i * R^i \quad \quad K_i\in (0,1…… R)

其中 K i K_i 为数码,R为基数, R i R^i 为权值

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取整,顺序排列”

img

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和符号位不同,故是错误的。

发布了145 篇原创文章 · 获赞 26 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43235540/article/details/104316228