数字与编码 Number and Code
数字系统 Number System
-
组成
- 基 Base:不同数码个数。
- 系数 Coefficient:相当于每一位上出现的数码。
- 位权 Power:数码的个数。
-
进制转换
-
不同进制的数可以理解为多项式:
x = K 1 R n + K 2 R n − 1 + ⋯ + K 0 R 0 . K − 1 R − 1 + K − 2 R − 2 + ⋯ + K − m R − m x=K_1R^n+K_2R^{n-1}+\cdots+K_0R^0.K_{-1}R^{-1}+K_{-2}R^{-2}+\cdots+K_{-m}R^{-m} x=K1Rn+K2Rn−1+⋯+K0R0.K−1R−1+K−2R−2+⋯+K−mR−m注意:这个多项式是在十进制下表达的。
-
十进制转换成其他进制:
-
前提条件:不同进制下不能混合运算,那么在什么时候实现的进制转换呢?
-
对于整数部分:不断对 R R R取余,后除以 R R R,直到为 0 0 0.
对 R R R取余,除以 R R R都是在十进制下运算的,只是每一次的余数变成了 R R R进制。
-
对于小数部分:不断乘以 R R R,后截取整数部分,直到为 0 0 0,或出现循环。
也是只有在整数部分的时候才转换成了 R R R进制。
-
-
其他进制转换成十进制:
-
每一位上乘以 R n R^n Rn.
对于每一位上的数码,先转换成十进制,再在十进制下相乘。
-
-
所以,进制转换只能实现在数码到数码的转换,我们只是想办法提取每一位的数码。
-
数和编码 Number and Code
-
数和编码的区别
- 数无长度限制,数的编码有限。(否则会溢出 Overflow)
- 表达形式不同。(如负数的反码、补码)
-
群(为了更清楚的讲解编码,有必要引出“群”的概念)
-
一个集合及其二元运算(以下以‘+’代替)满足一下性质称为群。
-
封闭性: ∀ a , b ∈ S , ⇒ a + b ∈ S \forall a,b \in S, \Rightarrow a+b\in S ∀a,b∈S,⇒a+b∈S.
-
结合律: ( a + b ) + c = a + ( b + c ) (a+b)+c=a+(b+c) (a+b)+c=a+(b+c).
-
幺元(单位元): ∃ e ∈ S , s.t. a + e = a , ∀ a ∈ S \exist e \in S,\textrm{s.t.} \ \ a+e=a, \forall a \in S ∃e∈S,s.t. a+e=a,∀a∈S.
-
逆元: ∃ a − 1 ∈ S , s.t. a + a − 1 = e , ∀ a ∈ S \exist a^{-1} \in S, \textrm{s.t.} \ \ a+a^{-1}=e, \forall a \in S ∃a−1∈S,s.t. a+a−1=e,∀a∈S.
s.t. \textrm{s.t.} s.t.:使得……满足(subject to)
-
-
阿贝尔群:除了上述条件,还满足交换律。
-
群同构:存在同态映射 Homomorphism( [ x ] c + [ y ] c = [ x + y ] c [x]_c+[y]_c=[x+y]_c [x]c+[y]c=[x+y]c)
-
满足条件1,2:半群;满足条件1,2,3:幺半群。
-
-
带符号数编码(无符号数,编码和数相同)
- 目的:设计出一种同态映射的编码系统。
-
符号幅度表示法 Sign Magnitude(SM)
- 用最高位表示符号,剩下二进制位表示数的绝对值。
- n n n位编码范围: − ( 2 n − 1 − 1 ) ∼ ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim (2^{n-1}-1) −(2n−1−1)∼(2n−1−1).
- 缺点
- 不是一一映射, 0 0 0有两种编码。
- 很显然也不是同态映射,比如一正一负两数相加就不行。
- 运算时要考虑很多情况,就只能靠硬件解决,消耗资源。
- 实际上还是无符号数的运算。
-
反码 1’s Complement
-
正数编码不变,负数取反。( x + ( − x ) = 2 n − 1 x+(-x)=2^n-1 x+(−x)=2n−1)
-
数和编码的转换( x < 0 x<0 x<0):
- 数 → \to →编码: x o n e = 2 n − 1 − ( − x ) x_{one}=2^n-1-(-x) xone=2n−1−(−x).
- 编码 → \to →数: x = − ( 2 n − 1 − x o n e ) x=-(2^n-1-x_{one}) x=−(2n−1−xone).
-
n n n位编码范围: − ( 2 n − 1 − 1 ) ∼ ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim (2^{n-1}-1) −(2n−1−1)∼(2n−1−1).
-
是否满足同态映射:若 x < 0 , y < 0 x<0,y<0 x<0,y<0,则
KaTeX parse error: Undefined control sequence: \ at position 19: …\begin{aligned}\̲ ̲ [x]_c+[y]_c&=…
( 2 n − 1 2^n-1 2n−1和 2 n + 1 − 1 2^{n+1}-1 2n+1−1在 n n n位编码下相同)因此可以通过适当的调整满足同态映射。
同时可以发现,符号位也参与了运算,所以是带符号数运算。
-
缺点:
- 0 0 0有两种编码:0000和1111(假设 n = 4 n=4 n=4).
-
-
补码 2’s Complement
-
考虑到反码经过加1满足同态映射,所以试一试(?)补码=反码+1.
-
x + ( − x ) = 2 n x+(-x)=2^n x+(−x)=2n.
-
n n n位编码范围: − 2 n − 1 ∼ ( 2 n − 1 − 1 ) -2^{n-1} \sim (2^{n-1}-1) −2n−1∼(2n−1−1).
-
数和编码的转换( x < 0 x<0 x<0):
- 数 → \to →编码: x t w o = 2 n − ( − x ) x_{two}=2^n-(-x) xtwo=2n−(−x).
- 编码 → \to →数: x = − ( 2 n − x t w o ) x=-(2^n-x_{two}) x=−(2n−xtwo).
-
是否满足同态映射:若 x < 0 , y < 0 x<0,y<0 x<0,y<0,则
和上面类似,显然满足 [ x ] c + [ y ] c = [ x + y ] c [x]_c+[y]_c=[x+y]_c [x]c+[y]c=[x+y]c.
对于减法(计算机会先自动借位)
[ x ] c − [ y ] c = 2 n + 1 + [ x ] c − [ y ] c = 2 n + 1 + ( 2 n − x ) − ( 2 n − y ) = 2 n + 1 − ( x − y ) = [ x − y ] c \begin{aligned} [x]_c-[y]_c &=2^{n+1}+[x]_c-[y]_c \\ &= 2^{n+1}+(2^n-x)-(2^n-y) \\ &=2^{n+1}-(x-y) \\ &=[x-y]_c \end{aligned} [x]c−[y]c=2n+1+[x]c−[y]c=2n+1+(2n−x)−(2n−y)=2n+1−(x−y)=[x−y]c所以补码满足同态映射。
而且对于减法,有
[ x ] c − [ y ] c = [ x − y ] c = [ x + ( − y ) ] c = [ x ] c + [ − y ] c \begin{aligned} [x]_c-[y]_c &=[x-y]_c \\ &=[x+(-y)]_c \\ &=[x]_c+[-y]_c \end{aligned} [x]c−[y]c=[x−y]c=[x+(−y)]c=[x]c+[−y]c 因此内部可以直接保留加法器。 -
优点:所有数与编码都是一一对应的。
-
-
溢出 Overflow:
- 无符号数:只要最高位发生进位就算溢出。
- 无符号数有补码(在减法的时候会加相反数的补码),但无法判断是否有溢出。
- 有符号数:最高位是否有变化
⟺
\iff
⟺是否有溢出。
- 对于正负相加(最高位符号不同),显然不会溢出。
- 只有正正相加、负负相加才可能会溢出,这时判断符号位是否有变化即可。
- 无符号数:只要最高位发生进位就算溢出。
随机生成矩阵:生成不可逆矩阵的概率为0,但行列式可能非常小,从而接近不可逆矩阵。
-
大小关系判断:看 a − b a - b a−b的答案:
- 无符号数:
- 若没有溢出( carry flag, CF = 0 \text{carry flag, CF}=0 carry flag, CF=0),则 a ⩾ b a \geqslant b a⩾b;
- 若溢出( CF = 1 \textrm{CF} = 1 CF=1),则 a < b a < b a<b.
- 有符号数:
- 若符号位等于溢出标志( SF = OF \textrm{SF = OF} SF = OF),则 a ⩾ b a \geqslant b a⩾b;(证明时分类讨论即可)
- 若符号位不等于溢出标志( SF ≠ OF \textrm{SF}\neq \textrm{OF} SF=OF),则 a < b a < b a<b.(可以同样用分类讨论,也可以用逆否命题)
OF \textrm{OF} OF:溢出标志, SF \textrm{SF} SF:符号位(运算结果最高位)
- 无符号数: