用钟表来理解补码

补码的产生原因

在计算机实现加法的运算逻辑之后,再用其他方式实现减法运算较为麻烦。所以加法运算的逻辑实现减法运算。

解决方案

类似于钟表,表针一圈圈的转,转到最大值时归0。补码的预算方式也是这样,例如计算4-1。

4-1
->4+[-1]补
->即表针转完一圈后少转一格
->4+(12-1)
->  4
   +a (此次用12进制表示:a为10,b为11)
--------
   13
因为钟表为1位12进制,所以1被舍去
->3

12-1=11-1+1,这个就是12进制的取反加1进行的运算。
取反就是用取值范围内的最大值-去当前值
例如
在一位12进制数中取反就是用b-要取反的数
在两位12进制中就是bb-要取反的数
在三位二进制中就是111-要取反的数(011取反为100)

在取值范围内的最大值+1=当前无符号数的数量,这正好是一个轮回的数量。所以最后要进行加1操作。

溢出

溢出的原因

因为一为12进制数加上符号位能表示的范围为-12~+11,得出的结果超过了这个范围就出现错误。

溢出的判断

首先在同符号的数相加时才会有溢出情况(也就是负数加负数,正数+正数)。判断条件为
1.两个同号数得出结果的符号位与原符号不同;
2.符号位所进的值与数字位最高位所进的值不同;
3.双符号运算,两个符号位为异或关系。
个人总结:正数相加最高位进位代表溢出,负数相加最高位不进位代表溢出。

十进制-12-11-10-9-8-7-6-5-4-3-2-1
十二进制101112131415161718191a1b
十进制01234567891011
十二进制000102030405060708090a0b
举例验证

符号位为二进制,数字位为12进制。

6+7:
      06                       006
     +07                     + 007
----------              -----------
      13                       013
-6-7:
    15                       115
  + 16                     + 116
----------               -----------
   10b                      110b

二进制同理

补充说明:

1.补充方案里求补码的方式没有涉及符号位,带符号位的求补码方式为
正数:照抄
负数:符号位照抄,数字位取反加一

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值