补码计算公式,原码补码反码怎么计算
补码计算公式,原码补码反码怎么计算详细介绍
本文目录一览: 补码怎么算?举例说明.
补码怎么算?举例说明。
在计算机系统中,数值,一律采用补码表示和存储。
数值与八位补码,对应关系如下:
求-9 的八位补码,方法步骤如下。
先减一:9-1 = 8 = 0000 1000 (二进制)。
再取反:1111 0111。
完事。
+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、二进制补码的计算方法:
二进制的补码计算非常简单,各种教材中也经常使用二进制来说明源码、反码与补码三者的关系,掌握一定基础的人都知道一下规则:
(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。
计算公式:
关系:
原码、反码、补码之间的转换关系是固定的,可以通过公式进行转换。
在计算机中,通常使用补码表示有符号整数,因为补码可以简化加减法的实现。
在进行加减法运算时,可以将两个数的补码相加,再将结果的补码转换为原码,即可得到正确的结果。
原码转反码:负数的反码是对其原码除符号位外的各位取反。
反码转原码:负数的原码是对其反码除符号位外的各位取反。
反码转补码:负数的补码是对其反码加1。
补码转反码:负数的反码是对其补码减1。
补码转原码:负数的原码是对其补码减1,再对其除符号位外的各位取反。
在进行位运算时,原码、反码、补码的结果是相同的,因为位运算只涉及数值大小,不涉及符号位。
在计算机中,通常使用补码表示有符号整数,因为补码可以避免出现两个0的情况,即+0和-0,同时也可以避免出现溢出的情况。
在进行乘法运算时,需要将两个数的补码相乘,再将结果的补码转换为原码,即可得到正确的结果。
总之,原码、反码、补码是计算机中表示有符号整数的三种方式,它们之间有固定的转换关系,可以根据需要进行相互转换。在实际应用中,通常使用补码表示有符号整数,因为补码可以简化加减法的实现,避免出现两个0的情况,同时也可以避免出现溢出的情况。
原码补码反码怎么计算
原码补码反码怎么计算
一、正整数的原码、反码、补码完全一样,即符号位固定为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。在计算中,两个互补的数称为“补码”。
什么是补码,其补码如何计算
补码,实际上,就是一个“代替负数”的正数。
使用了补码之后,计算机中,就没有负数了。
同时,也就没有减法运算了。
计算机,只要配置一个加法器,就能横行天下了。
这就是补码的作用。
---------------------
补码(一个正数),怎么就能代替负数呢?
想一想周期性的规律吧。
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),其余位表示数值的大小。
补码.原码.反码怎么运算的啊.详细一点
以8位机器码为例:
对正数而言,原码、反码、补码都是相同的。
十进制数7,
都是:
00000111
对于-7
原码,只是最高位用1表示负数,就是:
10000111
反码,就是在原码的上,除最高位(符号位)外,按位取反就行:
11111000
补码,就是在反码的基础上,最低位加1:
11111001
补码、原码、反码,这些都是计算机专家创造的词汇。
事实上,它们,都不应该存在。
计算机的运算,是很简单的,和这些词汇,并没有任何关系。
--------------------------
你想象一下:
有一个小朋友,很小的,大概是三岁吧。
他只会数一百个数(0~99),会加法,还不会做减法。
那么,你可以这样教他:加 99,就是减一。
比如: 25 - 1 = 24
25 + 99 = (一百) 24
他忽略了进位,只取 2 位数,结果,就是正确的。
--------------------------
上面是一个简单的例子,却说明了一个事实:
做计算时,限定了位数,正数,就能当做负数使用。
限定了位数,有两个意义:
数值是循环的,具有周期性;
有没有进位,都不必考虑。
代替负数的正数,可称为:负数的补数。
计算公式: 补数 = 负数 + 周期。
--------------------------
在计算机中,把 8 位 2 进制,称为一个字节。
计数值是:0000 0000~1111 1111。
十进制是:0 ~ 255。
计数周期:2^8 = 256。
此时,共有 256 的机器数。
较大的 128 个,就可以代表负数了:
-1 补码就是:-1 + 256 = 255 = 1111 1111。
-2 的补码 = 254 = 1111 1110。
。。。
-128 的补码 = 128 = 1000 0000。
较小的 128 个,就代表自身数值了:0 ~ 127。
--------------------------
减法算式: 5 - 7 = -2, 用 8 位补码计算如下:
5 = 0000 0101
-7 的补码 = 1111 1001
--相加---------------
得: (0) 1111 1101 = -2 的补码
在这里,用加法代替了减法,略去进位,结果,就完全正确。
--------------------------
计算机中,用正数(补码)代替负数,减法运算也就没有了。
因此,计算机的硬件,就可以得到简化了。
所以,在计算机系统中,数值,一律采用补码表示和存储。
原码和反码,都是不用的。
它们,计算机中,根本就不存在。
--------------------------
什么是补码? 为什么要用补码?
看完上面的介绍,相信你都有了答案。
那么,原码和反码,就没有任何意义了。
这两种代码,只是用来求补码的过渡而已。
其实,原码和反码,还有“取反加一”,都是“鸡肋”。
学习这些,浪费时间不少,却不懂【补码的意义】是什么。
特别是用“取反加一”求 0 和-128 的补码,就办不到了。
-128,有补码,却没有原码和反码,拿什么取反加一?
-0 的补码,求出来是 0000 0000。
符号位居然是 0 !
难道,负零,是正数吗?
有人说,零,不分正负,所有只有一个补码。
那么,原码反码,为什么有两个零?
--------------------------
其实,原码反码取反加一,就是一大篇自相矛盾的谬论。
老外数学不好,由此可见一斑。
什么是补码,怎么计算
补码不是特意设计出来的。
正常数字的计算,就有“补数”出现。
比如一个小朋友,数数,只会数到两位,到了一百,就从头开始数。
循环的周期,就是一百。
那么,对于他来说,减一,就和 +99 相同。
如: 24 - 1 = 23
24 + 99 = (一百) 23
忽略进位的一百,这两种算法,就是相同的。
99,就是-1 的补数。
计算公式: 补数 = 周期 + 负数。
按此公式,大家可以自己求出其它负数的补数。
-----------------
在计算机中,使用二进制,补数,就称为:补码。
各种计算机,所能计算二进制的位数,都是固定的。
八位机中,其数字是:0000 0000 ~ 1111 1111(十进制255)。
再加一,出现的进位就是 2^8 = 256。
即,八位机的计数周期,是 256。
按照前面的公式,负数的补码是: 周期 + 该负数。
(也有写成: 周期 - | 负数 |。 即:周期 - 对应的正数。)
那么,-1 的补码,就是 256-1 = 255 = 1111 1111(二进制)。
用“取反加一”来求,也是这个结果。
但是,用“取反加一”,就要记很多无用的东西:原码反码符号位等等。
而且,学习“取反加一”这方法,学不明白“加法代替减法”。
也不知道为什么,各本书,都写这些模糊学生思维的方法。
补码的设计目的是:
⑴使符号位能与有效值部分一起参加运算,从而简化运算规则.
⑵使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。
负数的补码就是对反码加1,而正数不变,正数的原码反码补码是一样的。
无论什么类型的数字,在计算机中,都是以“二进制代码”存储的。
下面按照八位二进制来说明,其它位数,自行脑补。
十进制数 0,存放的,就是二进制 0000 0000。
十进制数 +1,就加上 1,二进制是 0000 0001。
十进制数 +2,就再加 1,二进制是 0000 0010。
。。。
十进制数 +127,加 1加 1...,就加到了 0111 1111。
+127,这就是最大数值。
----------
负数怎么办? 你就从 0,依次递减吧。
十进制数 0,以二进制 0000 0000 存放。
十进制数 -1,就减去 1,得 1111 1111 = 255(十进制)。
十进制数 -2,就再减 1,得 1111 1110 = 254。
十进制数 -3,就再减 1,得 1111 1101 = 253。
。。。
十进制数 -128,减 1减 1...,得 1000 0000 = 128。
不要再减了,这就是最小值了。
(你再继续减,就是 0111 1111,这就是+127 了。)
因此,最小数就是-128。
----------
总结:
零和正数:直接用二进制存放。
负数:存放形式是【256+这个负数】。
这套存放格式,就是所谓的【补码】。
求【补码】,就是这么简单。
完全不用绕到“原码反码符号位”那么远。
可以用十进制来计算。如果需要二进制,你就再转换一下。
用这个方法,不涉及原码反码符号位,就少了不少麻烦事。
----------
为什么负数用补码存储?
利用补码,可以把减法运算,转换成加法。
(所以,在计算机中,有一个加法器,就够用了。)
例如,6-2 = 4,用补码运算如下:
6 的补码是 0000 0110
+ -2 的补码是 1111 1110
-----------------
(1) 0000 0100 (= 4 的补码)
(括号中的 1,是进位,舍弃不要了。)
注意:
如果运算结果超出了-128~+127 的范围,结果将是错的。
这种现象称为“溢出”。
再注意一下:进位,并不等于溢出。
---------
因为补码的这个特性,所以,在计算机中,只是使用补码存放数据。
而原码反码,在计算机中,都是不存在的。
原码反码 的用途,仅仅是用于“心算、笔算”。
其实,笔算的方法,并非只有“取反加一”。
另外,-128,有补码,但是却没有原码反码!
用“取反加一”来求-128 的补码,无异于缘木求鱼。
所以,大家,完全不必在原码反码 上浪费时间精力。
但是,考试怎么办?
呃 ...,还是别跟老师较劲,他怎么乱讲,你就怎么答吧。
计算机原码反码补码怎样计算
计算机中,只有补码,没有原码和反码。
数字,在计算机中,一律用补码表示。
数字与补码的关系,可见下表:
换算公式,很简单的,一看便知。
原码反码取反加一,实际上,都没有什么用处。
老外数学不好,才不得不用这么麻烦的做法。
计算机原码反码补码计算方法:
1、原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如如果是8位二进制:
[+1]原 = 0000 0001
[-1]原 = 1000 0001
第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:[1111 1111 , 0111 1111]
即[-127 , 127]
原码是人脑最容易理解和计算的表示方式。
2、反码
反码的表示方法是:正数的反码是其本身。负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
[+1] = [00000001]原 = [00000001]反
[-1] = [10000001]原 = [11111110]反
可见如果一个反码表示的是负数,人脑无法直观地看出来它的数值。通常要将其转换成原码再计算。
3、补码
补码的表示方法是:正数的补码就是其本身。负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)。
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
对于负数,补码表示方式也是人脑无法直观看出其数值的。通常也需要转换成原码在计算其数值。
扩展资料:
原码,反码和补码是完全不同的。既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?
首先,因为人脑可以知道第一位是符号位,在计算的时候我们会根据符号位,选择对真值区域的加减。但是对于计算机,加减乘数已经是最基础的运算,要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂。于是人们想出了将符号位也参与运算的方法。我们知道,根据运算法则减去一个正数等于加上一个负数,即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。
于是人们开始探索将符号位参与运算,并且只保留加法的方法。
补码.原码.反码怎么运算的啊.详细一点
以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(二进制)。
你用“原码反码符号位取反加一”来计算,也一样是这个结果。
无聊的时候,再探讨原码反码吧,反正也没有任何用处。