[音乐] 那么对于补码
它实际上是一种模运算当中的一种编码, 所谓模运算系统,实际上
它是有一个模,这个模实际上 就是一种同余的关系,
也就是说在模运算系统当中,一个数 与除以模以后的余数是等价的,
这个概念我这么讲可能不是很好理解, 我们通过例子来说明,现实生活当中,
我们可以找到一个非常常用的模运算系统, 时钟,时钟它有12个指针,1点
2点、 3点一直到12点,12点以后又变成了1点,
也就是说12点以后的这个13 除以12,它得到的余数是1,
也就是13和1是等价的, 就是一个数13除上模12,
得到的余数是1,这个1和13是等价的,这就是模运算系统的特点。
这就是模运算系统的特点,那么在这个模运算系统当中,如果我们要做减法的话,它很方便,- 可以用加法来实现,
比如说我们现在有一个钟表,它的时针是指向10点,
然后我们要把它拨向6点, 有两种拨法,一种是顺时针,一种是
逆时针拨,那如果我们顺时针拨的话,只要拨8格
那么拨8格以后,实际上就是10加8,10加8本来应该等于18,
但是钟表当中没有18这个格,这样的话过了12以后,又变成1, 2、
3、 4、 5、 6,所以加出来的18,它要对12去模
除上除12以后,它的余数是6, 这个6和我们倒拨4格,也就是10减4,
从这个逆时针的方向倒拨4格, 指到的那个地方是完全一样的。
也就是说10减4这个倒拨的方式,我们可以用顺拨8格来实现,
这个也就是说10减4的这个值,和10加8的值
在模12系统里面,它们是完全等价的, 都是指向6,那么也就是说我们
-4就是倒拨的4格,跟顺拨的8格是等价的,
我们把这个8称为-4
对12的补码,这里的模就是12,
也就是-4的模12补码等于8,
按照同样的道理,-3的模12补码是9,
-5的模12补码是7, 那么实际上也就是说12减3
等于12加9,等于12加9,
12减5等于12加7, 12加7,也就是说一个负数的补码
我们可以用模减去该负数的绝对值得到。
比如说,比如说-5的补码,我们可以用模12
减去-5的绝对值,减5,12减5等于7,
12减3等于9,所以-3的补码是9,-5的补码是7,
这个是在模12系统当中,负数补码的一个概念。
那么有了这个概念以后,我们就可以得到一个结论。
就是对于某一个确定的模,比如说这的12 某数减于,减去小于模的另一个数,
比如说10减去4, 可以用该数这个10
加上另一个数4的负数,就是-4的补码来代替。
10减4可以等于10加上-4的 补码8来代替,10减4等于10加8,
那么这样的话,我们就可以用加法来代替减法,
不要用减法来实现这个减运算,
而用加法规则来实现就可以了,所以在模运算系统当中,减法可以用加法来实现。
那么这样的话,就实现了加和减的统一。
比如说我们来举一个例子,刚才我们举的是钟表。
10点倒拨4格,我们可以用顺拨8格来实现。
那么在我们小时候我们用的这个算盘 当中,我们也可以用做加法来
实现减法运算,比如说我们现在有一个算盘,
它只有4档,然后我们只会加法口诀,不会减法口诀,
那也就是说我们只会做加法,不会做减法,但是现在我们要
在这个算盘上做减法,这时候我们通过做加法来实现。
那么,这一个算盘就是一个4位的十进制数的模运算系统。
它只有4个档,最多就是9999,
0000一直到9999,可以表示这么10000个数字,
所以当我们在用这一个算盘做减法 的时候,比如说用9828减去1928的时候,
我们可以用加法口诀做加法来实现。
那么,这个实现我们根据 上面一张PPT幻灯片里面讲的那个结论,
说一个数减去小于模的另一个数, 可以等于这一个数加上另一个数负数的补码。
也就是说我们要实现9828减1928 我们可以用9828加上负
1928的补码来实现,那么-1928
它的补码应该是模减去这个数的绝对值,也就是模
这的模当然就是10000,就是10的4次方减去1928
那么,这一个10的4次方减去1928 它的值是8072,因此我们要
算这个减法,我们只要用9828 加上8072就行了,只不过我们加出来的这个
结果最高位的1被丢掉了,不会在这个算盘上留下来, 在算盘上留下来的就是7900
那么,算盘上留下来的这个值就实际上相当于 17900除以
10000得到的余数, 那么7900就是余数,这个余数就是
和17900是一个等价的数,在模运算系统 当中,它是完全等价的,因此这个高位的1可以丢掉,
最终的结果就是7900,也就是9828减去1928
结果应该是等于7900。
这个结果很显然是正确的,显然是正确的。
那么,这个里面就实际上是在一个模运算系统当中进行的这个
运算,那么取模就相当于只留余数,高位的1就被丢掉了,
那么,在模运算系统当中,我们就可以用加法,
来实现这个减法运算,那么加的这个补码实际上很好算,
就是我们算负的1928的补码, 我们只要各位取反,末位加1就行了,
1的反数是8,9的反数是0,2的反数是7, 8的反数是1,1,末位再加1,就是2,就是80
72,我们很快能够得到这个-1928的补码,然后再就可以通过做加法来实现。
这个是现实世界当中的模运算系统。
那么,计算机内部我们讲过,它的表示运算都是用二进制来实现的。
就相当于是一个二进制的算盘,在这个算盘上只能拨0和1,
那么,比如说我们要在这样的算盘上面实现
这样两个数的相减,同样的我们可以跟前面一样,可以用加法来实现。
这个加法就是把第一个数 加上第二个数,负数的补码,也就是加上负的
01000000的补码, 那么,这个数减这个数等于这个数加上
这个数负数的补码,这个数负数的补码实际上是等于11000000。
那么,这两个数相加的结果在这个算盘上相加,
加出来的这个值是等于这样的一个数据:0+1=1
0+1=1这样子一直加上去 这样我们得到这样一个结果。
这个结果在这个算盘当中 最高位,多于八位的第九位的这个数字肯定是
丢掉的,最终得到的就是一个余数:0011 1111
而这个值,就应该是它减它的值,所以是正确的
那么我们可以看到这个补码,一个负数的补码是等于模 减掉这个数的绝对值,就是这个数。
其实我们可以看到减下来的结果 这个数实际上是等于这个
正数,也就是减的这个被减数的这个正数
各位取反末位加1得到的,这个就是
在计算机内部的一个执行过程,相当于计算机的算盘
所以我们可以得到一个负数的有一个结论,就是一个负数的补码
等于对应正数补码的各位取反末位 加1,比如说我们这求的是这个负数的补码
这个负数的补码,我们可以是这个数各位取反,就是 1011
1111 然后末位再加1,加1以后就变成1100
0000这个数 就是各位取反末位加1
这个是一个负数补码的求法
那么运算器是只有有限的数位
假设只有n位,那么运算结果也就只能保留低n位
因此我们可以把运算器看成是只有n档的二进制算盘
它的模呢是2的n次方,比如说当n等于4的时候
就相当于是一个钟表 在这个上面可以表示2的4次方个数
2的4次方等于16,也就是最多可以表示16个数据
0000,0001一直到1111这样16个
数字,这16个数字实际上就要是16个机器数
这16个机器数对应的真值是-8到+7 -8到+7。
那么这一边有一个 补码的定义,也就是说我们要求这个x的这个真值
它在机器里面用补码表示的这个机器数 我们只要加上这个模就可以了
那么对于正数来说,当这个x是正数的时候,那么取加上这个
模,这个模是这样:如果是n等于4的话,这个模就是2的4次方,就是16
加16以后,这个16还是被取模给取掉了,就是一除以16以后,这是相当于
剩下来的余数还是x,所以正数的补码是它本身
如果是负数的话,那么我们加上x,就是加上这个负数
就相当于是模减去这个负数的绝对值,就跟我们前面讲的那个结论 是一样的。
那么这个x,刚才我们讲了,它就是一个 真值。
我们这个表达是这个公式就是求一个真值 现实生活当中的一个值,在机器里面用补码表示的时候
对应的那个序列,这个补码就是一个机器数 那么机器数的含义,大家应该是明白了,就是
用0和1表示的一串01序列 比如说我们在这个公式里面可以看出
-8的补码用这个公式来算的话应该是
负的1000,-8
所以它的这个补码,我们可以看出,用这个公式来算
它应该等于2的4次方,也就是16
加上x,就是加上-8 就是减去8
那很显然,这个结果应该是等于 000
这个0减1不够,借过来一个1 那么就是10减1,应该是等于1
应该等于1,那么高位这个应该是0
这边减的是1000
这样子做减法的,000,这边是
10,也就是2,2减以1就是1,这边1借掉了以后,这边这个就是0
那么最后取模,就是取 后面的这个4位,因为它的这个模是2的这个
4次方,也就是拿这个数除以16得到的余数当然就是
1000,因此-8的补码就等于1000
1000就是说这边对应的这一个 真值应该是等于-8,-8
那么实际上你再去看的话,这个对应的这个应该是+7
对应的+7;这个对应的这个应该是-7,这个可以
一个一个可以算一下,按照这个公式代进去算一下就 可以得到机器数和真值之间的对应关系。
[音乐]
[音乐]