原码、补码以及四则运算

 原码:以n位为例,最高位表示真值的符号位,0表示正号,1表示负号,剩下的n-1位对数字部分进行编码。如果数字部分不足n-1位,则在高位补零,补足n-1位。

 注意,按照以上表示方法,0的表示方法有两种:+0=0000 0000;-0=1000 0000。

 原码是对数值的直接表示,所以其简单直观,但是在进行加减法运算时,需要对符号位和数值等等绝对值大小进行判断,使得运算十分复杂。


 补码:符号位与原码相同,0表示正数,1表示负数。数字部分与符号位相关,正数的数字部分与原码相同,负数的数字部分需要将原码的数字部分按位取反再加1。以补码转换原码时,也是按位取反再加1。

 原码与补码的转换:x=+1101,y=-1110

 原码:0000 1101,1000 1110

 补码:0000 1101,1111 0010

 以补码求原码:0000 1101,1000 1110

 补码的表示范围:

 在8位的位模式下,正数部分为0000 0000到0111 1111,即+0到+127,负数部分1000 0000到1111 1111。

 我们需要对负数部分的补码进行转换,得到原码才能知道表示范围。

 1000 0000的原码为1 1000 0000,即-128,1111 1111的原码为1000 0001,即-1。注意这里1000 0000的原码实际上是溢出了的。

 所以8位的位模式下,补码的表示范围是[-128,127],或者[-128,128)。

 对于n位的位模式,补码的表示范围是-2^(n-1)到2^(n-1)-1,一共2^n个数。


 之所以要使用补码,因为补码可以简化运算,补码运算有下面两个公式:

 (x+y)补=x补+y补(x-y)补=x补+(-y)补

 这里只对第二个公式进行推导。

 (x-y)补=(2^n+(x-y)) mod 2^n

    =((2^n+x)+(2^n-y)) mod 2^n

    =x补+(-y)补

 例:A=+1011=11,B=+1110=14,求A-B

 A补=0 1011,B补=0 1110,A补+(-B)补=0 1011+1 0010=1 1101=(A-B)补,则A-B=1 0011=-3

 在进行补码运算时,符号位也参与运算,且不考虑符号位的进位问题,直接忽略掉进位。

 例:A=+1111=15,B=-1101=-13,求A+B

 0 1111+1 0011=10 0010,这里我们直接忽略最高位的1,结果变为0 0010=2

 二进制的乘法运算与人们通常使用的十进制乘法运算有相似之处,分别使用乘数的各个数与被乘数相乘,最后结果相加,于是有:

 例:1101*1011即13*11

 1101+1101 0+0000 00+1101 000=1000 1111

 所以二进制的乘法运算其实就是被乘数的移位与相加,这两个动作都可以使用加法器完成。

 二进制的除法运算实际是除数的移位与相减,显然加法器是可以完成这两个动作的,这里不做解释。

 至此,二进制的四则运算都已完成。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值