带符号整数的表示和运算_原反补

带符号整数,即整数,例如:-1、-2、1、2、3

带符号整数在计算机硬件内如何运算呢?

这就要提到原码补码反码了,正数其原反补码一样而负数则有不同,下面介绍负数的原反补码。

通常第一位为符号位,其余为数值位。第一位为0表示正数,第一位为0表示负数。若机器字长为n+1位,带符号整数的原码可表示的范围:-(2的n次方-1)~+(2的n次方-1)

以8符号位的通用寄存器表示:

A:+19表示为00010011     B:-19表示为10010011

A+B 如果单纯按位相加则为 10100110,而实际上+19+(-19)的答案是0,结果与实际相悖。这就要提出原码的缺点了,符号位不能参与运算,需要设计复杂的硬件电路才能处理,费钱!

该怎么解决呢?用补码表示真值——符号位可以直接相加。

负数原码变反码符号位不变数值位取反,反码变补码末尾加1

-19 原码 10010011 反码 11101100 补码 11101101

-100 原码 11100100 反码 10011011 补码 10011100

补码怎么转变原码呢?通常可以将补码最后一位减1转变为反码继而各数值位取反得到原码,还有一种简便方法。

正数其原码与补码形式相同,负数原码转补码与补码转原码可采用从右往左找到第一个1,这个1左边的所有“数值位”按位取反

学会了原码转变补码后我们再回看A+B的运算

A +19 补码 00010011 B -19 补码 11101101

按位相加计算A+B的补码为00000000   (只保留8位)

值得注意计算机补码数值位不能解读为“位权”

计算机硬件做补码的加法:从最低位开始,按位相加(符号位参与运算),并往更高位进位。

聊完了补码的加法下面看看补码的减法:

A-B等价为A+(-B)那么如何通过B的补码求-B的补码呢?只需将全部位按位取反、末尾+1,注意全部位是指符号位加数值位。

例如 +19 补码 00010011 全部位按位取反 11101100 末尾+1 11101101

         -19 补码 11101101 全部位按位取反 00010010 末尾+1 00010011

有没有更快速的方法呢? 有 与上述原码变补码方式类似,只需从右往左找到第一个1然后将其余位包含符号位全部按位取反

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值