有符号数的加减法

1、有符号数与无符号数的区别

有符号数和无符号数都是人为定义的,有符号数比无符号数多了一个符号位(左边第一位),符号位表示为1为负,0为正;如10011,假如定义为无符号数,那么它就是19,假如定义为有符号数,那么它就是-3。

2、原码,反码,补码的区别

反码是原码除符号位以外的数全部取反得到的。

在计算机中的计算一律以补码形式进行。正数的反码和补码是它本身,负数的补码是其反码加1;

原码反码补码
001000100010
101011011110
110110101011

还有一种补码的简记方法:原码的符号位不变,从右边第一个1起(第一个1不变)其它位全部取反,即符号位到右边第一个1的中间范围数字全部取反。

3、补码加减法的运算

 补码运算时,溢出显得尤为重要,不正确地处理溢出会导致运算结果的错误。

对一个N位二进制补码,其可以表达的范围是 - 2N-1+1 ~ 2N+1 - 1之间。如果超出这个范围就称为溢出了。

判断溢出:1101 + 1011,大家可以看到我拿两种不同颜色标注了它们最开头的两个数,我们把红色的符号位进位值和蓝色相加的进位值进行比较。如果两者相同(即00或者11),则不溢出,如果两者不同(即01正溢出,10负溢出),则发生溢出,最后的解必定会出错。

      1101        -3

+    1011       -5

=    11000      

此时,超出位宽的数被自然舍弃,剩下的值为1000,但是1000转换为原码就是1000(即-0),这与我们的答案就有所不同

由此可见不正确地溢出会发生错误

为了避免这种情况,我们可以在计算前将它们的位宽增加一位,如

     11110    -3

+   11011    -5

=  111000 

舍去超出位宽的1,剩下的数为11000,转换为原码则为11000(即-8),与我们想要的答案一致

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

与fpga斗智斗勇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值