一:用十进制去看待补码的减法
比如计算8-7,
补码的减法就是相当于要把它变成8加上一个正数,且答案和8-7一样,
8加上什么正数等于1呢?我要说答案是3,你会不会扁我?但是补码它就是这么干的,而且答案还是正确的!!!。
设计补码的目的就在于有意识地引用了计算机对符号位的自动处理,利用了最高位进位的自动丢弃实现了符号的自然处理。
比如上题8+3=11,11丢掉10之后就是1了,也就是8-7的正确答案。
二;用十进制去理解补码的减法。
不仅是8-7可以转化为8+3-10,任何有限的整数都可以通过这个方法来把
减法(被减数-减数=差)转化为加法(加数2+加数2=和)。
比如:
9-2=9+8-10;
127-45=127+55-100;
1-99945=1+55-100000;
我们可以通过用比减数高一位的一个计数单位减去减数来得到将来要用到加法里面的加数2。
比如10-2=8,100-45=55,100000-99945=55;
实际上带符号机器数的负数补码也可以通过用高一位的一个计数单位减去正数的补码这种方法得到,如:
10000000—[+045]补(00101101)=[-045]补(11010011);
哦,我们可以看到:
(1)将正数的补码其绝对值按位求反(即1变0,0变1)后再末尾加1
(2)用高一位的一个计数单位减去正数的补码
(1)和(2)其结果是一样的!!!
为什么呢?
试着用十进制理解,
(10-2=8)是不是就是(10-1-2+1=9-2+1=8)?
(100-45=55)是不是就是(100-1-45+1=99-45+1=45)?
在二进制里面(9-2)以及(99-45)就相当于其绝对值按位求反。
比如11111111-00101101=11010010;
而在二进制里面(9-2+1)以及(99-45+1)就相当于其绝对值按位求反再末尾加1。
比如11111111-00101101+1=11010011;
最后:
二进制里用高一位的一个计数单位减去正数的补码就相当于绝对值按位求反再末尾加1!!!
比如100000000-00101101=11111111-00101101+1=11010011;
综上,我们会发现,
直接进行减法运算,熟能生巧,这是人类擅长的。
按位取反,末尾加一,自动丢弃最高位的进位。这是计算机擅长的。
补码的减法正是人类针对计算机的特性,将其优点尽量发挥的一种编码方式。
PS:计算机中的数据用采用二进制计数制的机器数来表示。
带符号的机器数最高位为0表示正,为1表示负。
补码是带符号的机器数采用的一种编码方式,n位带符号的机器数
正数的补码其最高位为0,其余的n-1位表示数值的绝对值。
负数的补码是将正数的补码其绝对值按位求反(即1变0,0变1)后再末尾加1。
举例如下:(若机器字长n等于8)
[+001]补=00000001,[-001]补=11111111
[+127]补=01111111,[-127]补=10000001
[+045]补=00101101,[-045]补=11010011
补码有个特点,就是其减法可以转化为加法来做。即[x]补-[y]补=[x]补+[-y]补
比如[+127]补-[+045]补=[+127]补+[-045]补
共同学习,写下你的评论
评论加载中...
作者其他优质文章