补码是怎么算的,补码的补码怎么求?
补码是怎么算的,补码的补码怎么求?详细介绍
本文目录一览: 补码是怎样计算的?
无论是十进制还是十六进制的数,在求补码时,都先转化为二进制,再进行补码的转换。
例如:
15的十六进制为F,转化为二进制为00001111,再转为反码00001111,最后转化为补码00001111。
正整数的补码是其二进制表示,与原码相同。
扩展资料:
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码的特性:
1,一个负整数(或原码)与其补数(或补码)相加,和为模。
2,对一个整数的补码再求补码,等于该整数自身。
3,补码的正零与负零表示方法相同。
参考资料来源:百度百科-补码
补码怎么算
计算机中的计算,都是用补码进行的。
补码怎么算?
极其简单!
计算机中,只有加法器。
补码的计算,也只有一种:加法。
你记住:逢二进一,就行了。
补码的计算方法有二进制补码的计算和十进制补码的计算。
1、二进制补码的计算方法:
二进制的补码计算非常简单,各种教材中也经常使用二进制来说明源码、反码与补码三者的关系,掌握一定基础的人都知道一下规则:
(1)原码。
最高位为符号位,0表示正数,1表示负数。
例如:X=0b11(3),四比特表示原码=0011(3);
X=-0b11(-3),四比特表示原码=1011(11);
(2)反码。
最高位为符号位,0表示正数,1表示负数。正数的反码等于本身,负数的反码除符号位外,各位取反。
例如:X=0b11(3),四比特表示原码=0011(3),对应反码为=0011(3);
X=-0b11(-3),四比特表示原码=1011(11),对应反码为=1100(12);
(3)补码。
最高位为符号位,0表示正数,1表示负数。
正数的补码等于本身,负数的补码等于反码+1:
例如:X=0b11(3),四比特表示原码=0011(3),对应反码为=0011(3),补码为=0011(3);
X=-0b11(-3),四比特表示原码=1011(11),对应反码为=1100(12),补码为1101(13);
2、十进制补码的计算方法:
对于十进制数来说,通过前面的性质不难得到正十进制数补码等于其本身,对于负十进制数来说如果还按位进行运算就太麻烦了!为了讲明白,我们从补码的起因说起:
“反码加一”只是补码所具有的一个性质,不能被定义成补码。负数的补码,是能够和其相反数相加通过溢出从而使计算机内计算结果变为0的二进制码。这是补码设计的初衷,具体目标就是让1+(-1)=0,这利用原码是无法得到的:
0001(1)+1001(-1)=1010(-2)。
而在补码中:
0001(1补)+1111(-1补)=10000(1溢出)。
所以对于一个n位的负数-X,有如下关系:X补+(-X)补=100...0=2n。
所以假设寄存器是n位的,那么-X的补码,应该是2n?X的二进制编码。
补码运算规则是什么?
计算机中,只有加法器。
借助补码,就不用做减法了。
乘除法,也是没有意义的。
所以,补码,只有加法运算。 按照:逢二进一,即可。
在计算机系统中,数值,一律采用补码表示和存储。
数值的运算,也是用补码的运算,来代表的。
使用补码来运算,就非常简单了。
因为,数值运算有加有减,变换成补码之后,就只有加法运算了。
二进制补码的加法运算,只有一个规则,即:逢二进一。
对于正数,原码反码补码都是一样的,对于负数,不看符号位对于剩下求反。
就是把0变成1把1变成0,就是求反了,求反后+1再添上符号位.就得到了补码,注意这里符号位是不参与取反与+1的10000001
首位(符号位)是1,这个数位负数。
取反:11111110加1
11111111结果为-127
扩展资料:
正数
正整数的补码是其二进制表示,与原码相同。
例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
参考资料来源:百度百科-补码
补码怎么计算?
计算机中的计算,都是用补码进行的。
补码怎么计算?
很简单,就按照“逢二进一”进行,就完事了。
+62原码01000001,反码和补码与原码相同
-62原码11000001:
反码10111110
补码10111111
例如:
+64 原码=反码=补码=0100 0000。
-10 原码=1000 1010;
-10 反码=1111 0101;
-10 补码=1111 0110。
以补码相加,得:0011 0110,这是+54 的补码。
扩展资料:
假设当前时针指向8点,而准确时间是6点,调整时间可有以下两种拨法:一种是倒拨2小时,即8-2=6;另一种是顺拨10小时,8+10=12+6=6,即8-2=8+10=8+12-2(mod 12).在12为模的系统里,加10和减2效果是一样的,因此凡是减2运算,都可以用加10来代替。
若用一般公式可表示为:a-b=a-b+mod=a+mod-b。对“模”而言,2和10互为补数。实际上,以12为模的系统中,11和1,8和4,9和3,7和5,6和6都有这个特性,共同的特点是两者相加等于模。
参考资料来源:百度百科-补码
原码反码补码怎么算
原码反码补码计算方法如下:
一、原码
1:字长为8 , 符号位(首位)为0 表示正数 ; 符号位(首位)为1 表示负数。
2:0000 0001 表示 正1 ; 1000 0001 表示负1。
二、反码
1:正数,反码和原码一样。正1的原码和反码为0000 0001。
2:负数,符号位不变,其他位取反。负1的反码为:1111 1110。
三、补码
1:正数,补码和原码一样。正1的补码为 0000 0001。
2:负数,补码为反码加1,负1的补码为 1111 1111。
3:计算机在计算的时候是用补码在计算。
四、移码
1:补码的符号位取反 正1的移码为 1000 0001 ; 负1的移码为 0111 1111。
二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统。
数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。20世纪被称作第三次科技革命的重要标志之一的计算机的发明与应用,因为数字计算机只能识别和处理由‘0’.‘1’符号串组成的代码。
其运算模式正是二进制。19世纪爱尔兰逻辑学家乔治布尔对逻辑命题的思考过程转化为对符号"0''.''1''的某种代数演算,二进制是逢2进位的进位制。0、1是基本算符。因为它只使用0、1两个数字符号,非常简单方便,易于用电子方式实现。
如何求补码
首先应确定,补码的位数。
再看下图,即可找到方法。
回答问题之前先让我们来了解一下:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。
因此我们在求一个数的补码之前,应当先求出这个数的原码。
将一个数转化为二进制数,既是它的源码。可通过除二求余法算得(既对一个数除二求余,这会得出一个数和一个余数,再对得出来的数进行求余,得出余数,以此类推,最后将余数倒写即可)。
如是一个正数,它的补码与它的原码相同;如果是一个负数,它的补码是在它的原码的基础上,开头符号位不变,其余各位取反,最后再在其上面+1(既在反码的基础上+1)。
计算机中什么叫补码啊``` 怎么算的?
1、补码就是正数不变,负数按位取反再加1,要先转化成2进制再算,符号正为0,负为1,取反的时候不变,你直接算出X+Y和X-Y的结果,再变成补码就可以了
2、最小值:11111111(-127),最大值01111111(+128)
补码,在计算机中,有所应用。
但是,补码的来源,是由算法导出的,和计算机无关。
比如,一个小孩,很小的。
他只认识 100 个数,也不会做减法。
那么,减一,就可以告诉他,用加 99 代替:
36 - 1 = 35
36 + 99 = (1) 35
忽略进位,结果不是一样的吗?
99,就是-1 的补数。
算法: 补数=模+负数。
其中的“模”,是计数系统中,数字个数的总数。
补码,也就是二进制的补数。
八位二进制,共有 256 个数字,模,就是 256。
255(1111 1111),就是-1 的补码;
254(1111 1110),就是-2 的补码;
... ...
128(1000 0000),就是-128 的补码。
算法:
补码=256 +负数。
正数,直接参加运算即可,用不着转换。
什么是补码,其补码如何计算
补码,实际上,就是一个“代替负数”的正数。
使用了补码之后,计算机中,就没有负数了。
同时,也就没有减法运算了。
计算机,只要配置一个加法器,就能横行天下了。
这就是补码的作用。
---------------------
补码(一个正数),怎么就能代替负数呢?
想一想周期性的规律吧。
2 位 10 进制数(0~99),计数周期就是 10^2=100。
可有: 25 - 1 = 24
25 + 99 = (一百) 24
你舍弃进位的 1,只保留 2 位数,+99 就能代替-1!
而且,加法,也能代替减法运算!
同样,+98 也可以代替-2。
。。。
这些正数,就称为“负数的补数”。
求补数的公式,显然就是:
补数=负数+10^n
式中:n 是补数的位数。
10^n,是 n 位 10 进制数的周期。
这公式,在三角函数中,也有雷同的表现。
三角函数,是以 2π 为周期的。
任何负角度,加上周期,就可以转换为正角度。
如:x =-π/2,与其等效的正角度,即为:
x =-π/2 + 2π = +3π/2
-------------------
计算机用二进制,补数,就称为:补码。
求负数的补码,公式是:
补码 = 负数 + 2^n
2^n,是 n 位 2 进制数的计数周期。
对于 8 位 2 进制数,周期就是 2^8 = 256。
那么,
-1 的补码就是 255 = 1111 1111 (二进制)。
-2 的补码就是 254 = 1111 1110 (二进制)。
。。。
-128 的补码就是 128 = 1000 0000 (二进制)。
正数,不用转换,也不许做任何转换,必须直接去参加算。
所以,零和正数,并没有补码。
-------------------
求补码,不需要“符号位原码反码取反加一符号位不变”。
那一大堆步骤,并没有什么数学理论依据。
数学不好的老外,弄不懂周期,才用那些骚操作。
而且,原码反码,在计算机中,根本就不用!
忽悠大家学了一大堆,一丁点用处也没有的。
就比如-9补码是11110111。
9的源码为00001001,如果是负数的话,补码为最高位置1,其余取反也就是11110110,然后在最低位加1即可即11110111。
计算机中的负数是以其补码形式存在的补码=原码取反+1。
一个字节有8位可以表示的数值范围在-128到+127。用二进制表示也就是10000000-01111111(注意:最高位表示符号)。最高位是1的都是负数最高位是0的都是正数。
扩展资料:
补码乘法
补码的乘法不具备【X*Y】补=【X】补×【Y】补的性质。但是【X*Y】补==【X】补×Y,所得结果再取补码,如x=101,y=011,[x*y]补=-[(-101)*011]=-[011*011]=-01001=10111。
其中,若【Y】补=y31y30……y0,则Y=-y31*2^31+y30*2^30+……+y0*2^0
原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
补码的补码怎么求?
在进行补码加减运算时,常采用双符号表示,即正数符号用00,负数符号用11表示.
已知X=+24D=000011000B,Y=-64D=111000000B,则[X]补=000011000B,[Y]补=111000000B,
因为[-Y]补是将[Y]补所有位变反末位加1得到的,所以[-Y]补=001000000B
[X-Y]补=[X]补+[-Y]补=000011000B+001000000B=001011000B
已知:X =+24D,Y =-64D。
求: [X-Y]补 = ?
解:
[X-Y]补
= [+24-(-64)]补
= [24+64]补
= [88]补 = 0101 1000。
已知: X = +24D,Y =-64D,-Y = 64D。
求:[X-Y]补 = ?
解:按照字长八位处理。
[X]补 = 0001 1000
[-Y]补 = 0100 0000
--相加-----------
得: 0101 1000 = [X-Y]补 = +88D
求给定数值的补码表示分以下两种情况:
(1)正数的补码
与原码相同。
【例1】+9的补码是00001001。(备注:这个+9的补码说的是用8位的2进制来表示补码的,补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。)
(2)负数的补码
负数的补码是对其原码逐位取反,但符号位除外;然后整个数加1。
同一个数字在不同的补码表示形式里头,是不同的。比方说-15的补码,在8位2进制里头是11110001,然而在16位2进制补码表示的情况下,就成了1111111111110001。在这篇补码概述里头涉及的补码转换默认了把一个数转换成8位2进制的补码形式,每一种补码表示形式都只能表示有限的数字。
【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001)
所以-7的补码是11111001。
已知一个数的补码,求原码的操作分两种情况:
(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
再举一个例子:求-64的补码
+64:01000000
11000000
【例3】已知一个补码为11111001,则原码是10000111(-7)。
因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”。
其余七位1111001取反后为0000110;
再加1,所以是10000111。
在“闲扯原码、反码、补码”文件中,没有提到一个很重要的概念“模”。我在这里稍微介绍一下“模”
的概念:
“模”是指一个计量系统的计数范围。如时钟等。计算机也可以看成一个计量机器,它也有一个计量范
围,即都存在一个“模”。例如:
时钟的计量范围是0~11,模=12。
表示n位的计算机计量范围是0~2^(n)-1,模=2^(n)。
“模”实质上是计量器产生“溢出”的量,它的值在计量器上表示不出来,计量器上只能表示出模的
余数。任何有模的计量器,均可化减法为加法运算。
例如:
假设当前时针指向10点,而准确时间是6点,调整时间可有以下两种拨法:
一种是倒拨4小时,即:10-4=6
另一种是顺拨8小时:10+8=12+6=6
在以12模的系统中,加8和减4效果是一样的,因此凡是减4运算,都可以用加8来代替。
对“模”而言,8和4互为补数。实际上以12模的系统中,11和1,10和2,9和3,7和5,6和6都有这个特
性。共同的特点是两者相加等于模。
对于计算机,其概念和方法完全一样。n位计算机,设n=8,
所能表示的最大数是11111111,若再
加1称为100000000(9位),但因只有8位,最高位1自然丢失。又回了00000000,所以8位二进制系统的
模为2^8。
在这样的系统中减法问题也可以化成加法问题,只需把减数用相应的补数表示就可以
了。把补数用到计算机对数的处理上,就是补码。
另外两个概念
一的补码(one's
complement)
指的是正数=原码,负数=反码
而二的补码(two's
complement)
指的就是通常所指的补码。
小数补码求法:一种简单的方式,符号位保持1不变,数值位从右边数第一个1及其右边的0保持不变,左边按位取反。
(3).补码的绝对值(称为真值)
【例4】-65的补码是10111111
若直接将10111111转换成十进制,发现结果并不是-65,而是191。
事实上,在计算机内,如果是一个二进制数,其最左边的位是1,则我们可以判定它为负数,并且是用补码表示。
若要得到一个负二进制数的绝对值(称为真值),只要各位(包括符号位)取反,再加1,就得到真值。
如:二进制值:10111111(-65的补码)
各位取反:01000000
加1:01000001(+65的补码)
编辑本段代数加减运算
1、补码加法
[X+Y]补
=
[X]补
+
[Y]补
【例5】X=+0110011,Y=-0101001,求[X+Y]补
[X]补=00110011
[Y]补=11010111
[X+Y]补
=
[X]补
+
[Y]补
=
00110011+11010111=00001010
注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是
100001010,而是00001010。
2、补码减法
[X-Y]补
=
[X]补
-
[Y]补
=
[X]补
+
[-Y]补
其中[-Y]补称为负补,求负补的方法是:负数的绝对值的原码所有位按位取反;然后整个数加1。
(恢复本来解释。请路人真正理解并实际验证后再修改。以免误导大众。另外,例6不具典型性,新增例7。)
【例6】1+(-1)
[十进制]
1的原码00000001
转换成补码:00000001
-1的原码10000001
转换成补码:11111111
1+(-1)=0
00000001+11111111=00000000
00000000转换成十进制为0
0=0所以运算正确。
【例7增】-7-(-10)
[十进制]
-7的补码:11111001
-10的补码:11110110
-(-10):按位取反再加1实际上就是其负值的补码,为00001010
-7
-
(-10)=
-7
+
10
=
3
11111001+00001010
=
00000011
转换成十进制为3
3、补码乘法
设被乘数【X】补=X0.X1X2……Xn-1,乘数【Y】补=Y0.Y1Y2……Yn-1,
【X*Y】补=【X】补×【Y】补,即乘数(被乘数)相乘的补码等于补码的相乘。
编辑本段补码的代数解释
任何一个数都可以表示为-a=2^(n-1)-2^(n-1)-a;
这个假设a为正数,那么-a就是负数。而根据二进制转十进制数的方法,我们可以把a表示为:a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2),第(n-1)位为符号位不计算在内。
这里k0,k1,k2,k(n-2)是1或者0,而且这里设a的二进制位数为n位,即其模为2^(n-1),而2^(n-1)其二项展开是:1+2^0+2^1+2^2+……+2^(n-2),而式子:-a=2^(n-1)-2^(n-1)-a中,2^(n-1)-a代入a=k0*2^0+k1*2^1+k2*2^2+……+k(n-2)*2^(n-2)和2^(n-1)=1+2^0+2^1+2^2+……+2^(n-2)两式,2^(n-1)-a=(1-k(n-2))*2^(n-2)+(1-k(n-3))*2^(n-3)+……+(1-k2)*2^2+(1-k1)*2^1+(1-k0)*2^0+1,而这步转化正是取反再加1的规则的代数原理所在。因为这里k0,k1,k2,k3……不是0就是1,所以1-k0,1-k1,1-k2的运算就是二进制下的取反,而为什么要加1,追溯起来就是2^(n-1)的二项展开式最后还有一项1的缘故。而-a=2^(n-1)-2^(n-1)-a中,还有-2^(n-1)这项未解释,这项就是补码里首位的1,首位1在转化为十进制时要乘上2^(n-1),这正是n位二进制的模。
不能贴公式,所以看起来很麻烦,如果写成代数式子看起来是很方便的。
注:n位二进制,最高位为符号位,因此表示的数值范围-2^(n-1)
--2^(n-1)
-1,所以模为2^(n-1)。上面提到的8位二进制模为2^8是因为最高位非符号位,表示的数值范围为0--2^8-1。