补码概念、补码公式以及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的补数是4。6-8=10,⽤补码表⽰为:6+4=10。结果是相同的。
在系统中问题也可以化成加法问题,只需把⽤相应的表⽰就可以了。把补数⽤到计算机数的处理上,就是补码。
补码的总前提是机器数,不要忘了机器数的符号位含义,最⾼位为0表⽰正数,最⾼位为1表⽰负数,⽽最⾼位是指机器字长的最左边⼀位。
求⼀个数补码的⽅法:转化为固定位宽⼆进制数,正数补码为原数;负数补码需对该数先取反,后加⼀。
补码规则:
(1)正数补码
正整数的补码是其⼆进制表⽰,与相同。
【例1】+9的补码是00001001。(备注:这个+9的补码是⽤8位2来表⽰的,补码表⽰⽅式很多,还有16位⼆进制补码表⽰形式,以
及32位⼆进制补码表⽰形式,64位进制补码表⽰形式等。每⼀种补码表⽰形式都只能表⽰有限的数字。)
(2)负数补码
求负整数的补码,将其对应正数⼆进制表⽰所有位取反(包括符号位,0变1,1变0)后加1。
同⼀个数字在不同的补码表⽰形式中是不同的。⽐如-15的补码,在8位⼆中是11110001,然⽽在16位⼆进制补码表⽰中,就
补码的最小负数
是1111111111110001。以下都使⽤8位2进制来表⽰。
【例2】求-5的补码。
-5对应正数5(00000101)→所有位取反(11111010)→加1(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
加1:01000001(+65)
(5)⼩数补码
⼀种简单的⽅式,符号位保持1不变,数值位从右边数第⼀个1及其右边的0保持不变,左边按位取反。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。