原码补码计算公式,补码怎么算
原码补码计算公式,补码怎么算详细介绍
本文目录一览: 原码补码反码怎么计算
原码补码反码怎么计算
一、正整数的原码、反码、补码完全一样,即符号位固定为0,数值位相同。
二、负整数的符号位固定为1,由原码变为补码时,规则如下:
1、原码符号位1不变,整数的每一位二进制数位求反,得到反码。
2、反码符号位1不变,反码数值位最低位加1,得到补码。
方法:
(1)正整数的原码,反码和补码计算。【符号位为0,原码=反码=补码】
(2)负整数的原码,反码和补码计算,先求原码,再求反码,最后求补码。
(3)根据补码求真值,一般使用图中的公式计算,正整数符号为+,负整数符号为-,通常完成补码求真后,可以按步骤1、2简单的逆推一下,看结果是否正确。
扩展资料:补码的表示方法:
模的概念:把一个计量单位称之为模或模数。例如,时钟是以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而言互为?补数。
同理,计算机的运算部件与寄存器都有一定字长的限制(假设字长为8),因此它的运算也是一种模运算。当计数器计满8位也就是256个数后会产生溢出,又从头开始计数。产生溢出的量就是计数器的模,显然,8位 二进制数,它的模数为2^8=256。在计算中,两个互补的数称为“补码”。
原码反码补码计算公式及关系
原码反码补码计算公式及关系如下:
原码:二进制数的最高位表示符号位,0表示正数,1表示负数,其余位表示数值大小。
反码:正数的反码与原码相同,负数的反码是对其原码除符号位外的各位取反。
补码:正数的补码与原码相同,负数的补码是对其反码加1。
计算公式:
关系:
原码、反码、补码之间的转换关系是固定的,可以通过公式进行转换。
在计算机中,通常使用补码表示有符号整数,因为补码可以简化加减法的实现。
在进行加减法运算时,可以将两个数的补码相加,再将结果的补码转换为原码,即可得到正确的结果。
原码转反码:负数的反码是对其原码除符号位外的各位取反。
反码转原码:负数的原码是对其反码除符号位外的各位取反。
反码转补码:负数的补码是对其反码加1。
补码转反码:负数的反码是对其补码减1。
补码转原码:负数的原码是对其补码减1,再对其除符号位外的各位取反。
在进行位运算时,原码、反码、补码的结果是相同的,因为位运算只涉及数值大小,不涉及符号位。
在计算机中,通常使用补码表示有符号整数,因为补码可以避免出现两个0的情况,即+0和-0,同时也可以避免出现溢出的情况。
在进行乘法运算时,需要将两个数的补码相乘,再将结果的补码转换为原码,即可得到正确的结果。
总之,原码、反码、补码是计算机中表示有符号整数的三种方式,它们之间有固定的转换关系,可以根据需要进行相互转换。在实际应用中,通常使用补码表示有符号整数,因为补码可以简化加减法的实现,避免出现两个0的情况,同时也可以避免出现溢出的情况。
原码与补码的转换
两个说法都没有错,我们举个例子来看看就明白了:
1、10001的补码是取反后在再加1,也就是11110+1=11111;
2、如果是11111变回原码呢?我们可以采取逆过程先减1,11111-1=11110,再取反变为10001;
3、如果要是在补码变原码时先去反再加一呢?(就是问题中的说法)结果为11111先取反为10000,再加1,10000+1=10001。这个结果与2是一样的,并且也是和1中的原码相吻合。
通过上述例子可以看出,无论是原码变补码还是补码变原码,都可以采取先取反再加1的方法。至于原因是很容易想通的。
按照正常思维来想的话,补码变成原码应该是原码变补码的逆过程,也就是2步中的方法。但是我们可以思考一下,如果我们没有按照2步中的方法而是先去取反了呢?先取反得到的结果和2步的结果有什么差异呢?答案是差了1,2步中是先减1才取的反,而直接取反的话,就没有减1。
接着请注意,在取反前减1和在取反后加1的效果是一样的。这就和-3-1=-(3+1)是一个道理。
所以问题中的说法没有错误。
正数: 原码=反码=补码=该正数。
负数:
补码=原码取反+1。
原码=补码取反+1。
互相转换的方法,是相同的。
注意:符号位不要动,总是 1。
另外,码长八位时,-128,只有补码,没有原码。
由原码转换到补码,取反加一,在大部分场合,是可行的。
但是,-128 没有原码,用取反加一来求补码,就不行了。
同样,由补码求原码,也有-128 的难处。
怎么办呢?
原码反码取反加一,必须抛弃了。
-------------------------
通用的公式:负数 X 的补码 = 2^n - | X |
负数 X 的绝对值 | X |,当然就是正数了。
就是“由负数相反的数”来算出“负数的补码”。
其实,这是很简单的! 减一取反,即可。
比如: |-128 | = 1000 0000(二进制)。
减一,得:0111 1111。
取反,即:1000 1111,这就是 [-128]补!
又如: |-9 | = 0000 1001(二进制)。
减一,得:0000 1000。
取反,即:1111 0111,这就是 [-9 ]补!
--------------------------
“减一取反”,这方法,百试百灵的。
完全不需要使用“原码反码”这些不完善的码制。
而且,由已知的“负数补码”转换为“正数补码”,也可以用这个方法。
源码和宝马的转换应该把宝马转换成源码,这样才有利于别人去看清晰。
1、首先要知道,换算规则:原码转换为反码:符号位不变,数值位分别“按位取反” 。
2、接着反码转换为原码也是一样,但规则却有不同之处:符号位不变,数值位分别“按位取反”。
3、然后就是,原码转换为补码的规则:符号位不变,数值位按位取反,末位再加1。
4、最后补码转换为原码:符号位不变,数值位按位取反,末位再加1,即补码的补码等于原码。
5、而求补(变补)的换算规则与之前有所差别:符号位和数值位都取反,末位再加1。
原码反码补码怎么算
原码反码补码计算方法如下:
一、原码
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两个数字符号,非常简单方便,易于用电子方式实现。
补码怎么算
计算机中的计算,都是用补码进行的。
补码怎么算?
极其简单!
计算机中,只有加法器。
补码的计算,也只有一种:加法。
你记住:逢二进一,就行了。
补码的计算方法有二进制补码的计算和十进制补码的计算。
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的二进制编码。
计算机原码补码的计算
在计算机系统中,数值,一律使用补码来表示和存储。
原码和反码,在计算机中,都不存在,所以,和它们的转换,也是不存在的。
正负数值和补码,有一个转换公式,可以直接转换,不需要讨论原码和补码。
应该从“模”这个出发点,来讨论补码,这才能理解补码的意义。
学习原码反码符号位取反加一,这就走错道了。
计算机原码补码的计算方法:
1、原码:在计算机中的机器字长的最高位(最左边)表示正负,0为正数,1为负数,原码就是最高位是符号位,其余位表示数值(绝对值)大小。
2、反码:正数的反码就是其本身(原码)不变,而负数的反码就是在负数原码的基础上符号位保持不变,其余位按位取反。
3、补码:正数的补码就是其本身(原码),而负数的补码就是在原码的基础上符号位保持不变其余位按位取反,然后再+1,即在反码的基础上+1。
总结:正数的原码、反码和补码都一样,都等于原码。负数的反码就是在原码的基础上符号位不变其余位按位取反,负数的补码就是在反码的基础上+1。
扩展资料:
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
原码不能直接参加运算,可能会出错。例如数学上,1+(-1)=0,而在二进制中00000001+10000001=10000010,换算成十进制为-2。显然出错了。所以原码的符号位不能直接参与运算,必须和其他位分开,这就增加了硬件的开销和复杂性。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,和原码、反码等相比可表现在如下方面:
(1)解决了符号的表示的问题;
(2)可以将减法运算转化为补码的加法运算来实现,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计;
(3)在计算机中,利用电子器件的特点实现补码和真值、原码之间的相互转换,非常容易;
(4)补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。
参考资料:百度百科-原码、百度百科-补码
补码怎么计算?
计算机中的计算,都是用补码进行的。
补码怎么计算?
很简单,就按照“逢二进一”进行,就完事了。
+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都有这个特性,共同的特点是两者相加等于模。
参考资料来源:百度百科-补码
二进制的原码、补码、反码详解
在计算机中所有的数据都是以二进制储存的。
+3: 0000 0011
-3: 1000 0011
中机器数中,使用最高位来表示数字的政府:1为负,0为正;
一个字长为8为。
单看1000 0011这个数,不知道是机器数还是二进制数,所以引出了机器数的真值概念。
机器数的真值就是机器数所对应的真值的数值;
如:1000 0011 = -3;
0000 0011 = 3;
符号位: 首先确定一个数的正负,如果是正数,首位使用0表示,如果是负数,首位用1表示。
有效位: 真值的绝对值转化为二进制形式。
符号为和有效位拼接到一起。
正数: 正数的反码和原码相同。 +3 :0000 0011【原码】 0000 0011【反码】
负数: 符号位不变 ,其余各位直接取反,二进制只有两种状态:1->0;0->1; -3:1000 0011【原码】 1111 1100【反码】
正数: 正数的原码反码补码全部相同 +3: 0000 0011【原码】 0000 0011【反码】 0000 0011【补码】
负数: 求得原码,再求反码,中最后一位+1,这就是负数的补码 -3:1000 0011【原码】 1111 1100【反码】 1111 1101【补码】
反码: 中没有计算机的时候只设计了加法器, 没有减法器 ,使用加法计算来表示减法,
补码: 反码解决了没有减法的问题,但是会出现绝对值相同的正负两个数相加会出现-0情况,那么在计算机中不能出现 0的表现不唯一 情况,所以采用补码进行修正。
【注】1、采用补码计算; 2、正数补码、反码、原码相同; 3、负数首位符号位为1;
例:正数相加
36+18
例:减法 (可以看做负数相加)
56-33
56为正数,补码和源码一样,求出-33的补码,然后将两个数的补码相加得出结果
正数: 补码=反码=原码
负数: 补码的补码(首位不变,其余取反,再加1)
正数: 不变(原码 = 反码= 补码)
负数: 首位不变,其余取反。
原码和反码,在计算机中,都不存在。
详解它们,都没有任何意义。
在计算机系统中,只用补码,表示数值。
你只需掌握“数值与补码”的换算,即可。
---------------------
补码,其实是一个“代替负数”的正数。
利用补码代替了负数之后,计算机中,就没有负数了。
同时,也就没有了减法运算。
因此,计算机,只需具有一个加法器,就可以走遍天下了。
---------------------
正数(即补码),怎么就能代替负数呢?
其中的道理,十分简单。就是三岁小孩,都会懂的。
你三岁时,只会数一百个数(0~99)。
到了 100,就重新开始数,10^2,就是你的计数周期。
这时,你就可以用加法,来做减法:
25 - 1 = 24
25 + 99 = (一百) 24
进位,你一定会忽略! 那么在此时:
+99 就可以当做-1 使用。
+98,也就能当-2 了。
。。。
这些正数,就是“负数的补数”。
怎么求:补数 = 负数 + 周期(10^n),n 是位数。
---------------------
计算机用二进制,此时,就叫做“补码”了。
8 位 2 进制数的计数周期是:2^8 = 256。
那么,-1 的补码就是:-1 + 256
= 255 = 1111 1111(二进制)。
-2 的补码是:254 = 1111 1110。
。。。
补码是“代替负数”的正数。
而正数,不需要代替,必须直接参加运算。
也就是说,正数,不存在补码。
这就是补码的详解。
---------------------
补码,和原码反反码,都没有任何关系。
取反加一符号位不变。。。都没有任何依据,就不要相信了。
计算机中,并没有原码和反码,只是使用补码,代表正负数。
使用补码的意义:可以把减法或负数,转换为加法运算。从而简化计算机的硬件。
------------
比如钟表,时针转一圈,周期是 12 小时。
倒拨 3 小时,可以用正拨 9 小时代替。
9,就称为-3 的补数。
计算方法:12-3 = 9。
对于分针,倒拨 X 分,就可以用正拨 60-X 代替。
------------
如果,限定了两位十进制数 (0~99),周期就是 100。
那么,减一,就可以用 +99 代替。
24-1 = 23
24 + 99 = (1) 23
忽略进位,只取两位数,这两种算法,结果就是相同的。
于是,99 就是 -1 的补数。
其它负数的补数,大家可以自己求!
求出了负数的补数,就可用加法,代替减法了。
------------
计算机中使用二进制,补数,就改称为【补码】。
常用的八位二进制是:0000 0000~1111 1111。
它们代表了十进制:0~255,周期就是 256。
那么,-1,就可以用 255 = 1111 1111 代替。
所以:-1 的补码,就是 1111 1111 = 255。
同理:-2 的补码,就是 1111 1110 = 254。
继续:-3 的补码,就是 1111 1101 = 253。
。。。
最后:-128,补码是 1000 0000 = 128。
计算公式:负数的补码=256+这个负数。
正数,直接运算即可,不需要求补码。
也可以说,正数本身就是补码。
------------
补码的应用如: 7-3 = 4。
用补码的计算过程如下:
7 的补码=0000 0111
-3的补码=1111 1101
--相加-------------
得: (1) 0000 0100 = 4 的补码
舍弃进位,只保留八位,作为结果即可。
这就是:使用补码,加法就代替了减法。
所以,在计算机中,有一个加法器,就够用了。
原码和反码,都没有这种功能。
------------
原码和反码,毫无用处。计算机中,根本就没有它们。
补码.原码.反码怎么运算的啊.详细一点
以8位机器码为例:
对正数而言,原码、反码、补码都是相同的。
十进制数7,
都是:
00000111
对于-7
原码,只是最高位用1表示负数,就是:
10000111
反码,就是在原码的上,除最高位(符号位)外,按位取反就行:
11111000
补码,就是在反码的基础上,最低位加1:
11111001
在计算机中,使用的是二进制。
八个二进制位,称为一个字节。
计数范围是:0000 0000~1111 1111。
对应十进制:0 ~ 255,共有 256 个数字。
计数周期是:2^8 = 256。
在计算机中,并没有负数。
计算机中这些数字,都属于自然数,即“零和正数”。
但是,实际上,正数,也能当负数用的。
你看 2 位 10 进制数的计算:
25 - 1 = 24
25 + 99 = (一百) 24
如果你不舍弃进位,结果就 124,+99 还是 99。
如果,舍弃超出 2 位数的进位,+99 就相当于-1 。
这时的正数,就称为“负数的补数”。
算法是:补数=负数+周期 (10^n),n 是补数的位数。
-------------------------
在计算机中,255 = 1111 1111,就相当于-1。
示例: 0000 0001 = 1
+ 1111 1111 = 255
--------------
(1) 0000 0000 = 0
舍弃了进位 1,这算式,就是:+1 -1 = 0。
如果保留进位,这就是: 1 + 255 = 256。
-------------------------
同理,254 = 1111 1110,就相当于-2。
。。。
只要你舍弃进位,这些正数,就可以代表负数,参加运算。
这些正数,就称为:负数的补码。
补码 = 负数 + 周期(2^n),n 是补码的位数。
-------------------------
利用补码,可以把减法,转换成加法。
从而就能简化计算机的硬件。
原码和反码,都没有这种功能。
所以,在计算机中,并没有原码和反码。
符号位原码反码取反加一,这些,都是“鸡肋”。
学习这个,花费不少时间,还是弄不懂“补码的意义”。
老外数学不好,也就只能整这些骚操作了。
计算机中,并没有原码反码,只有补码。
补码,是在计算机中,自然形成的,跟原码反码毫无关系。
对于补码,应该直接用二进制来讨论,不要绕道并不存在的原码反码上去。
以八位机来说明如下。
数字 0,就是用八个位:0000 0000 来存放的。
数字-1,就是用零的二进制,减去一,即:
0000 0000-1 = (1) 1111 1111,
仍存放八个位,就是 1111 1111 (十进制255)。
数字-2,你就再减去一,就是 1111 1110 (=254)。
数字-3,你就再减去一,就是 1111 1101 (=253)。
。。。
-128,就是减 128 次一,最后得 1000 0000 (=128)。
这些就是负数的补码。
计算公式: 256+该负数
=256-对应的正数
-18 的补码就是:256-18 = 238 = 1110 1110(二进制)。
你用“原码反码符号位取反加一”来计算,也一样是这个结果。
无聊的时候,再探讨原码反码吧,反正也没有任何用处。