补码概念、补码公式以及MATLAB求补码方法

求负数补码公式(x为负数二进制数,N为位宽)

       (1)

或者

      X补码 = 2^N + X     (2)    (X为十进制数,得到十进制X补码,再将其转换为二进制形式) 

补码 = 2的N次方 - (负数绝对值的二进制表示)

补码 + 负数绝对值的二进制表示 = 2的N次方

对于位宽为N的正数x,我们要求−x的补码就是求正数的原码,所以我们得到在MATLAB里求一个位宽为N的整数x的补码表示的代码如下:

 

 

计算机中的符号数有三种表示方法,即原码反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示,用1表示,而数值位,三种表示方法各不相同。

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

实质上是计量器产生溢出的量,它的值在计量器上表示不出来,计量器上只能表示出模的余数。任何有模的计量器,均可化减法加法运算。模固定时,减去一个数,相当于加上一个数的补数。

如钟表数字模为12, 8的补数是46-8=10,用补码表示为:6+4=10。结果是相同的。

       在系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以了。把补数用到计算机数的处理上,就是补码。     

       补码的总前提是机器数,不要忘了机器数的符号位含义,最高位为0表示正数,最高位为1表示负数,而最高位是指机器字长的最左边一位。

求一个数补码的方法:转化为固定位宽二进制数,正数补码为原数;负数补码需对该数先取反,后加一。

 

补码规则:

(1)正数补码

       正整数的补码是其二进制表示,与原码相同。

【例1+9的补码是00001001。(备注:这个+9的补码是用82进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)

 

2)负数补码

求负整数的补码,将其对应正数二进制表示所有位取反(包括符号位,0110)后加1

同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用82进制来表示。

【例2】求-5的补码。

-5对应正数500000101所有位取反(111110101(11111011)

所以-5的补码是11111011

【例3】数0的补码表示是唯一的。

[+0]=[+0]=[+0]=00000000

[ -0]=11111111+1=00000000

 

3)转化原码

已知一个数的补码,求原码的操作其实就是对该补码再求补码:

如果补码的符号位为“0”,表示是一个正数,其原码就是补码。

如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。

【例4】已知一个补码为11111001,则原码是10000111-7)。

因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”

其余七位1111001取反后为0000110

再加1,所以是10000111

 

4)补码的绝对值

【例5-65的补码是10111111

若直接将10111111转换成十进制,发现结果并不是-65,而是191

事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。

若要得到一个负二进制补码的数值,只要对补码全部取反并加1,就可得到其数值。

如:二进制值:10111111-65的补码)

各位取反:01000000

101000001+65

 

       5)小数补码

一种简单的方式,符号位保持1不变,数值位从右边数第一个1及其右边的0保持不变,左边按位取反。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值