二进制加法

有符号二进制与无符号二进制数之间的区别

对于一个有符号二进制数来讲,最高位是该数的符号位,0表示正数,1表示负数,例如(这里先用常用的8位二进制数来讨论)00001100在这个二进制数中,表示的是十进制12,再如10010110表示的是十进制-22。

我们可以发现,在有符号二进制数中,它能表示的十进制范围为-127 - +127
有人反对该系统的原因是以为他有两个值表示0,00000000和10000000。
又可以是-128——+127 可以发现范围跟二进制位数有关,-2的n-1次方到2的n-1次方-1。(后面会用到)

有符号二进制加法运算

我们可以知道,二进制中的运算都是利用补码进行运算的,因为它可以将减法运算转换为对减数的补码进行加法运算,例如,用7+5的补数就可以完成7-5。
先进行求补码-5用二进制表示10000101,先将它用补码表示,即负数的补码是反码+1,即11111011
对于正数7,补码就是本身00000111
现在将两数相加

11111011
+00000111
——————
100000010
会发现结果的位数会多了一个,这时候我们会将进位位忽略,结果就为0000010=》2,正如我们所料。

讨论关于有符号二进制数算术的溢出问题(重点)

根据上述我们发现在有符号中的表示范围是-2的n-1次方到2的n-1次方-1,如果破坏了这个规则,则会发生溢出



Alt


12+13
首先先转换成二进制数
12
01100
13
01101
相加
01100
01101
————
11001
转换为补码为
10110+1=10110=-7
咦!!!这是怎么肥事啊?
这就是发生溢出,到底怎么回事。首先我们先将数看成是无符号数,会发现结果为25,但是对于5位二进制有符号数表示的范围我们会发现,范围为-16——+15,而结果25明显已经大于了15,所以会发生数据溢出异常导致数据错误,那我们怎么解决问题呢?




看这里


我们可以增加位数来提高数据表示的范围,来确保数据不被溢出,怎么增加,在哪增加,是在不改变数据的符号大小的情况下,进行添加的,添加0;
例如在该例子中我们对01100添加一位0=》001100,对01101=》001101
这样的添加并不会影响到符号,和数据的大小


我们在进行运算
001100
001101
——————
011001
=》转换为十进制为25,yes!正确。

无符号二进制运算

对于无符号的二进制运算就如上所示进行变换,并不需要考虑溢出的问题,直接相加即可,二进制的乘除,将在下一篇中介绍
Alt

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值