数字量:在时间上和数量上都是离散、不连续的。(存在一个最小数量单位△)
模拟量:数字量以外的物理量。
可数的是离散的,不可数的是连续的。
Impacts design at many levels
Mechanism 机械
Efficiency 效率
Reliability 可靠性
Security 安全性
为什么需要补码?
如果使用原码进行运算,则会出现以下问题
-5+5不为0
所以需要补码来解决上述的问题。
首先看一个例子,例如生活中指针式手表,它是采用旋钮进行更改时间的,例如当前是指向的8点,如果想更改为7点钟,我们可以有两个操作
常规操作就是减1:8-1 = 7
但是我们想可以时钟是12进制的,那么是不是可以往前拨动,即 8+11(拨动11个位置) = 7
那么就是 8-1 等效于 8+11
本来是一个相减的问题变换成了相加的一个问题,那么我们所有的调整时间都可以采用相加的形式计算。
因为8-1和8+11的效果是等效的,更进一步的说,在目前进制下我们可以说-1的补码就是11,同理可得,-2的补码就是10,由此得出规律,负数的补码就是当前进制位下的最大值(钟表系统下是12)-补码数的绝对值
回归到上述引出的问题,那么得到+5的表示方式还是 00101,那么-5应该表示为什么呢?
符号位为1,因为它是个负数,后面采用上述的方法计算补码
1111为4位进制位下的最大数,即15
15-|-5| = 10
那么补码的后四位即是 10 = 1010
最后组合起来就是11010
上述是错的,为什么,因为在时钟系统里面是没有0时刻的,但是二进制十进制里面是有0这个数的,那么说明我们计算补码的时候需要多考虑一个数,那么,正确的计算应该如下所示:
15-|-5| = 10
10+1 = 11
那么补码的后四位即是 11 = 1011
最后组合起来就是11011
那么我们计算以下-5+5 =11011+ 00101 = 1 00000 ,这个时候是要舍弃最高位1的,因为这里采用5位,那么就得到了0,计算正确。
回归到计算机系统里面,为什么要舍弃最高位?
因为计算机里面的带宽是有限的,例如8位,32位,64位,他们一次只能计算这么长的位的数据,过大他们会舍弃最高位的数据,而小于带宽内的数据则肯定用不了这么多位,例如上述计算采用8位计算:
+5 = 00000101
-5 = 11111011
计算出来的结果任然是对的,而且由于补码的性质,说明我们在拓展位的时候,正数的补码应该前面补0,而负数的补码应该是前面补1。
注意系统选取的位数
计算补码的时候应该考虑系统的位,因为有些时候计算可能会超出当前系统的位数,导致计算出错,如下图所示:
注意计算最后最大是23,故要用6位,即注意答案的取值范围
5位会出错:
二进制补码为什么不对称?
因为数值0占用了正数的位置(0000表示0,所以占用了位置),但是和无符号的表示的数字的量是一样多的
二进制原码取反+1
小数情况是加在最后一位。
等长编码:用同样长度编码
余3码解决问题
进位缺陷~~,2+9, 8421不会落在8421码表里面,而余3码进位以后,剩余4位还是会落在余3码表里面~~