计算机的补码怎么算8位补码是怎么计算的呢

计算机中的所有数据都是以数据嘚补码形式存储的(机器码)这里涉及到原码、反码和补码的计算如下:

1、原码:在计算机中的机器字长的最高位(最左边)表示正负,0为囸数1为负数,原码就是最高位是符号位其余位表示数值(绝对值)大小。

2、反码:正数的反码就是其本身(原码)不变而负数的反碼就是在负数原码的基础上符号位保持不变,其余位按位取反

3、补码:正数的补码就是其本身(原码),而负数的补码就是在原码的基礎上符号位保持不变其余位按位取反然后再+1,即在反码的基础上+1

总结:正数的原码、反码和补码都一样,都等于原码负数的反码就昰在原码的基础上符号位不变其余位按位取反,负数的补码就是在反码的基础上+1

}

负数二进制补码怎么算?负数二进淛补码运算
需要说明一点补码是对负整数在中存储的一种形式;另一种形式是负数在计算机中可以用符号+负数绝对值的形式表示一个负数;比如(-3: 1000 0011存储)但是这种表示的负数有两个零+0-0,最要命的一点是不能做算术运算比如10-3=10+(-3)=+ 00 1101=-13显然是错的。所以负整数必须以补码存储
負数在计算机中如何表示?
举例来说+8在计算机中表示为二进制的1000,那么-8怎么表示呢
很容易想到,可以将一个二进制位(bit)专门规定为苻号位它等于0时就表示正数,等于1时就表示负数比如,在8位机中规定每个字节的最高位为符号位。那么+8就是,而-8则是
但是,随便找一本《计算机原理》都会告诉你,实际上计算机内部采用2的补码(Two’s Complement)表示负数。

在讲补码之前简单介绍机器数真值,原码和反码的背景
一个数在计算机中的二进制表示形式,  叫做这个数的机器数。机器数是带符号的在计算机用一个数的最高位存放符号, 正数0,負数为1
比如,十进制中的数 +3 计算机字长为8位,转换成二进制就是如果是 -3 ,就是 那么,这里的 和 就是机器数 机器数包含了符号和數值部分。

因为第一位是符号位所以机器数的形式值就不能很好的表示真正的数值。例如上面的有符号数 其最高位1代表负,其真正数徝是 -3 而不是形式值253(按无符号整数转换成十进制等于253)所以,为区别起见将带符号位的机器数对应的真正数值称为机器数的真值。
例:的真值 = +000 0001 = +1的真值 = – = –127;这里所说的比如-3二进制代码为,就是我们计算机里面对-3表示的源码下面介绍源码
在计算机内,有符号数有3种表礻法:原码、反码和补码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制
因为第一位是符号位, 所以若是8位二进制数,其取值范围就是:
原码是人脑最容易理解和计算的表示方式

反码表示法规定:正数的反码与其原码相同;负数的反碼是对其原码逐位取反,但符号位除外
可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算。

紸明:正数的补码与负数的补码一致负数的补码符号位为1,这位1即是符号位也是数值位然后加1

补码借鉴的模概念,虽然理解起来有点晦涩难懂可以跳过
模的概念:把一个计量单位称之为模或模数。例如时钟是以12进制进行计数循环的,即以12为模
在时钟上,时针加上(正拨)12的整数位或减去(反拨)12的整数位时针的位置不变。14点钟在舍去模12后成为(下午)2点钟(14=14-12=2)。从0点出发逆时针拨10格即减去10小時也可看成从0点出发顺时针拨2格(加上2小时),即2点(0-10=-10=-10+12=2)因此,在模12的前提下-10可映射为+2。由此可见对于一个模数为12的循环系统来說,加2和减10的效果是一样的;因此在以12为模的系统中,凡是减10的运算都可以用加2来代替这就把减法问题转化成加法问题了(注:计算機的补码怎么算硬件结构中只有加法器,所以大部分的运算都必须最终转换为加法)10和2对模12而言互为补数。同理计算机的补码怎么算運算部件与寄存器都有一定字长的限制(假设字长为16),因此它的运算也是一种模运算当计数器计满16位也就是65536个数后会产生溢出,又从頭开始计数产生溢出的量就是计数器的模,显然16位二进制数,它的模数为2^16=65536在计算中,两个互补的数称为“补码”比如一个有符号8位的数可以表示256个数据,最大数是0 1 1 1 1 1 1 1(+127)最小数1 0 0 0 0 0 0 0 (-128);那么第255个数据,加2和减254都是一样的效果得出的结果是第一个数据 所以2和254是一样的效果。对于255来说2和254是互补的数
求一个正数对应补码是一种数值的转换方法,要分二步完成:
第一步每一个二进制位都取相反值,即取嘚反码;0变成11变成0。比如的反码就是。
第二步将上一步得到的反码加1。就变成所以,的二进制补码就是也就是说,-8在计算机(8位机)中就是用表示
不知道你怎么看,反正我觉得很奇怪为什么要采用这么麻烦的方式表示负数,更直觉的方式难道不好吗

首先,偠明确一点计算机内部用什么方式表示负数,其实是无所谓的只要能够保持一一对应的关系,就可以用任意方式表示负数所以,既嘫可以任意选择那么理应选择一种用的爽直观方便的方式。
二进制的补码就是最方便的方式它的便利体现在,所有的加法运算可以使鼡同一种电路完成
还是以-8作为例子。假定有两种表示方法一种是直觉表示法,即;另一种是2的补码表示法即。请问哪一种表示法在加法运算中更方便随便写一个计算式,16 + (-8) = ?16的二进制表示是 所以用直觉表示法,加法就要写成:
+10001000原码形式-8
可以看到洳果按照正常的加法规则,就会得到的结果转成十进制就是-24。显然这是错误的答案。也就是说在这种情况下,正常的加法规则不适鼡于正数与负数的加法因此必须制定两套运算规则,一套用于正数加正数还有一套用于正数加负数。从电路上说就是必须为加法运算做两种电路。所以用原码表示负数是不行的
现在,再来看二进制的补码表示法
+11111000补码形式-8
可以看到,按照正常的加法规则得到的结果是。注意这是一个9位的二进制数。我们已经假定这是一台8位机因此最高的第9位是一个溢出位,会被自动舍去所以,结果就变成了转成十进制正好是8,也就是16 + (-8) 的正确答案这说明了,2的补码表示法可以将加法运算规则扩展到整个整数集,从而鼡一套电路就可以实现全部整数的加法

二进制补码的本质,本质是用来表示负整数的
在回答二进制补码为什么能正确实现加法运算之前我们先看看它的本质,也就是那两个求补码步骤的转换方法是怎么来的下面描述了一个正数怎么求它对应负数在计算机的补码怎么算表达方式。比如128正数为,但是惊奇的发现-128也是但是这里由于属于数据类型的限定,第八位同样一个1代表不同的含义前面的 1是数值位,后面数的 1是符号位
要将正数转成对应的负数,其实只要用0减去这个数就可以了比如,-8其实就是0-8用模数的概念解释如下图
已知8的二進制是,-8就可以用下面的式子求出:
---------- - - -
因为(被减数)小于0000100(减数)所以不够减。请回忆一下小学算术如果被减数嘚某一位小于减数,我们怎么办很简单,问上一位借1就可以了
所以,0000000也问上一位借了1也就是说,被减数其实是这是重点;算式也僦改写成:
---------- - -
进一步观察,可以发现可分拆为 = + 1所以上面的式子可以拆成两个:
 11110111取反
+00000001加一
二进制的补码两个转换步骤就是这么来的。
举个例子比如-128补码的由来,先把正整数128二进制表示出来求-128的补码
即-128的补码是8位嘚结构能表示的最小数是-128;
所以可以求补码的范式是这样的:
求n位系统的一个数正数A : ……….(n位二进制),怎么求他的补码呢就用n位的1111111…..111(n位) - ……….(n位二进制) + 1 = A的补码就行啦!但是
65535的补码:正数65535为11 1111,进行下面的计算求得B的补码即-B;先展示有补码符号位即补码有最高位位1嘚;
因为A和B 都是16位的无符号数,所以65535的补码最高位舍去相当于被减数是1 00 11 +1,即可以用上面的范式方法但是这样-B就没有体现它的负数的符號位了;当然这是因为16位运算超出16位的位都舍去了。即-B=1;即A-B= 200+1 =201其实也可以用模数概念解释A -B;如下图正数的模数
为什么正数加法也适用于二进淛的补码?
实际上我们要证明的是,X-Y或X+(-Y)可以用X加上Y的2的补码(-Y)完成
接下来,分成两种情况讨论
第一种情况,如果X小于Y那么Z是一个负數。这时我们就对Z采用补码的逆运算,就是在做一次求补码运算求出它对应的正数绝对值,只要前面加上负号就行了所以,
第二种凊况如果X大于Y,这意味着Z肯定大于但是我们规定了这是8位机,最高的第9位是溢出位必须被舍去,舍去相当于减去吗!所以减去所鉯,
这就证明了在正常的加法规则下,可以利用2的补码得到正数与负数相加的正确结果换言之,计算机只要部署加法电路和补码电路就可以完成所有整数的加法。

看过《负数二进制补码怎么算?负数二进制补码运算》的人还看了以下文章

}

你对这个回答的评价是

下载百喥知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

}

我要回帖

更多关于 计算机的补码怎么算 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信