负整数补码的三种方法

正整数的补码就是原码本身,所以本文主要梳理求负整数的补码的三种方法。为了进行数学化的表示,在正文开始之前我们规定:-N表示负整数,N表示-N的绝对值,N*表示-N的补码,该数的二进制位数为n,且N、N*和2^n都当作无符号正数。

方法一:N*=2^n-N

负整数-N的补码本质上就是其绝对值N的补数N*,故用数学表达式表示即为:补码N*=2^n-N。以-N=-7,n=4为例:

        (1)N*=2^4-N=16-7=9。因为N*是作为无符号正数,所以N*=9用二进制表示即为:(1001)₂,此即为负整数-N的补码。

        (2)N*=(10000)₂-N=(10000)₂-(0111)₂=(1001)₂,此即为负整数-N的补码表示。

方法二:N各位取反再加1

将方法一的公式改写为:N*=(2^n-1)-N+1。改写的原因在于:假如说用4位表示一个整数,2^n就是16,这个数如果直接用二进制表示的话就需要5位,而2^n-1恰好是可以用4个二进制位来表示的最大无符号正整数。以-N=-7,n=4为例:

        N*=15-N+1=(1111)₂-(0111)₂+(0001)₂=(1000)₂+(0001)₂=(1001)₂,此即为负整数-N的补码表示。

观察此计算过程,发现求-N的补码(N*)其实就是把N即(0111)₂的各位求反得到(1000)₂,然后加1从而得到(1001)₂。而这种求补码的方式也是上学时很多老师都会讲的,只是没有将该方法数学化。

方法三:从N的最右边开始,遇到的第一个1和其右边的所有0保持不变,其它各位取反

个人认为该方法就是方法二的规律的进一步总结。N各位取反再加1也就是从N的最右边开始,遇到的第一个1和其右边的所有0保持不变,其它各位取反。根据该方法,可以直接写出负整数-N的补码为(1001)₂

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值