正数补码怎么算,计算机中的补码怎么求
正数补码怎么算,计算机中的补码怎么求详细介绍
本文目录一览: 正数的补码是多少啊?
正数的补码是什么?
按照补码的性质:
[X]补 + [-X]补 = [0]补
那么:
[X]补 = [0]补-[-X]补
因此,正数的补码就是:
0 的补码,减去负数的补码。
正数和负数的补码是怎么计算的?
用代符号的八位二进制表示数据,最高位为符号位,1代表负数,0代表正书。其余的七位二进制数来代表实际数值,即是原码。
所以[+50D]原=00110010B,[-50D]原=10110010B。
正数的补码与原码相同,负数的补码,变换规则为:
在原码的基础上,符号位不变,其余七位各位取反,然后在最后一位加1,该向前进位的就进。
所以[-50D]补=11001111。
D表示十进制数,B表示二进制数。
用原码只能表示-127到127,永补码表示为-128到127。
对于你的补充问题,我也不太清楚。大概是看着方便吧
所谓的“补码”,是一个“代替负数”的正数。
比如,钟表的时针,倒拨 3 小时,可以用正拨 9 小时代替。
算法是:+9 = -3 + 12。
其中的 12,是时针的周期。+9 就称为-3 的补数。
分针,倒拨 X 分,也可用正拨 (-X + 60) 代替。
三角函数,周期是 2π。
任何的负角度,也可以用正角度代替。
如:-π/2,其等效值是:-π/2 + 2π = +3π/2。
-----------------------
通用的换算公式,是:等效的正数 = 负数 + 周期。
-----------------------
等效值,在计算机专业,就重新命名:补码。
对于 8 位 2 进制数,计数周期就是:2^8 = 256。
-1 的补码:-1 + 256 = 255 = 1111 1111 (二进制)。
。。。
-128 的补码: 128 = 1000 0000。
零和正数,并不存在“等效的正数”。
所以,零和正数,根本就不存在补码。
-----------------------
用补码(正数)代替负数之后,计算机中,就没有负数了。
同时,也就没有减法运算了。
因此,就可以简化计算机的硬件。
只要配置一个加法器,就可以走遍天下。
-----------------------
补码的来源和意义,就是这样的。
补码,与原码反码,并无半点关系。
取反加一,也没有任何的理论基础,都是瞎编的。
如何求补码
首先应确定,补码的位数。
再看下图,即可找到方法。
回答问题之前先让我们来了解一下:
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。
原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。
反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。
因此我们在求一个数的补码之前,应当先求出这个数的原码。
将一个数转化为二进制数,既是它的源码。可通过除二求余法算得(既对一个数除二求余,这会得出一个数和一个余数,再对得出来的数进行求余,得出余数,以此类推,最后将余数倒写即可)。
如是一个正数,它的补码与它的原码相同;如果是一个负数,它的补码是在它的原码的基础上,开头符号位不变,其余各位取反,最后再在其上面+1(既在反码的基础上+1)。
补码的计算方法
??计算方法补码是这样计算的:首位为符号位。符号位为0表示正数,正数的补码=原码=反码。符号位为1表示负数,负数的补码等于将符号位后面的位全部取反再加1。??补码的补码等于原码另外,一个数的补码的补码等于这个数的原码,所以如果已知一个数的补码,那么对这个补码求一次补码即可得到这个数的原码。??负数的补码的真值前面已经说了,负数的补码等于符号位后面的位全部取反再加1,所以11010101取反(符号位不变)为10101010,再加1,得到10101011,这即为原真值的原码,由此很容易得到真值为:-(32+8+2+1)= -43。
正数的补码是什么?
正数的补码,是其本身。
负数的补码,就用它的正数,减一取反,即可得到补码。
如,+9 的二进制是:0000 1001。
下面求-9 的补码:
先减一:0000 1001 - 1 = 0000 1000;
再取反:1111 0111。
所以有:-9 补码 = 1111 0111。
简不简单?意不意外?
原码反码符号位,都是毫无用处的,不必关心。
正数的补码是什么?
按照补码的性质:
[X]补 + [-X]补 = [0]补
那么:
[X]补 = [0]补-[-X]补
因此,正数的补码就是:
0 的补码,减去负数的补码。
正数的补码就是原码本身,负数的补码是其反码加1。
计算机中的有符号数有即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。
补码:在反码的基础上加1,这样可以方便计算机进行计算,可以让“最高位符号位都能参与计算”。原码:字节的最高位为符号位,其余表示数值大小,最简单;反码:正数的反码和原码一样,负数的反码除最高位符号位外,其他位都取反。
补码
补码“模”概念的引入、负数补码的实质、以及补码和真值之间的关系所揭示的补码符号位所具有的数学特征,无不体现了补码在计算机中表示数值型数据的优势,解决了符号的表示的问题,克服了原码加减法运算繁杂的弊端,可有效简化运算器的设计。
补码表示统一了符号位和数值位,使得符号位可以和数值位一起直接参与运算,这也为后面设计乘法器除法器等运算器件提供了极大的方便。补码概念的引入和当时运算器设计的背景不无关系,考虑到了数据存储和处理所需要的硬件代价。
以上内容参考 百度百科——补码
计算机中的补码怎么求
1、正数的补码表示:
正数的补码 = 原码
负数的补码 = {原码符号位不变} + {数值位按位取反后+1} or
= {原码符号位不变} + {数值位从右边数第一个1及其右边的0保持不变,左边安位取反}
以十进制整数+97和-97为例:
+97原码 = 0110_0001b
+97补码 = 0110_0001b
-97原码 = 1110_0001b
-97补码 = 1001_1111b
2、纯小数的原码:
纯小数的原码如何得到呢?方法有很多,在这里提供一种较为便于笔算的方法。
以0.64为例,通过查阅可知其原码为0.1010_0011_1101_0111b。
操作方法:
将0.64 * 2^n 得到X,其中n为预保留的小数点后位数(即认为n为小数之后的小数不重要),X为乘法结果的整数部分。
此处将n取16,得
X = 41943d = 1010_0011_1101_0111b
即0.64的二进制表示在左移了16位后为1010_0011_1101_0111b,因此可以认为0.64d = 0.1010_0011_1101_0111b 与查询结果一致。
再实验n取12,得
X = 2621d = 1010_0011_1101b 即 0.64d = 0.1010_0011_1101b,在忽略12位小数之后的位数情况下,计算结果相同。
3、纯小数的补码:
纯小数的补码遵循的规则是:在得到小数的源码后,小数点前1位表示符号,从最低(右)位起,找到第一个“1”照写,之后“见1写0,见0写1”。
以-0.64为例,其原码为1.1010_0011_1101_0111b
则补码为:1.0101_1100_0010_1001b
当然在硬件语言如verilog中二进制表示时不可能带有小数点(事实上不知道哪里可以带小数点)。
4、一般带小数的补码
一般来说这种情况下先转为整数运算比较方便
-97.64为例,经查询其原码为1110_0001.1010_0011_1101_0111b
笔算过程:
-97.64 * 2^16 = -6398935 = 1110_0001_1010_0011_1101_0111b,其中小数点在右数第16位,与查询结果一致。
则其补码为1001_1110_0101_1100_0010_1001b,在此采用 负数的补码 = {原码符号位不变} + {数值位按位取反后+1} 方法
5、补码得到原码:
方法:符号位不动,幅度值取反+1 or符号位不动,幅度值-1取反
-97.64补码 = 1001_1110(.)0101_1100_0010_1001b
取反 = 1110_0001(.)1010_0011_1101_0110b
+1 = 1110_0001(.)1010_0011_1101_0111b 与查询结果一致
6、补码的拓展:
在运算时必要时要对二进制补码进行数位拓展,此时应将符号位向前拓展。
-5补码 = 4'b1011 = 6'b11_1011
ps.原码的拓展是将符号位提到最前面,然后在拓展位上部0.
-5原码 = 4‘b’1101 = 6'b10_0101,对其求补码得6'b11_1011,与上文一致。
扩展资料:
计算机中的符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
补码是怎样计算的?
无论是十进制还是十六进制的数,在求补码时,都先转化为二进制,再进行补码的转换。
例如:
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的二进制编码。
举一个计算机补码计算的例子,以及怎么计算
正数,不需变换,直接就可以计算。
也有人说:本身就是补码。(强词夺理啊!)
负数,就用它的正数,减一取反,即可得到补码。
如:+9 的二进制是:0000 1001。
下面求-9 补码:
先减一:0000 1001 - 1 = 0000 1000;
再取反:1111 0111。
所以有:-9 补码 = 1111 0111。
简不简单? 意不意外?
原码反码符号位,都是毫无用处的,不用关心。
===============
计算: 23-9 = 14。
在计算机中,只有加法器,没有减法器。
所以,要使用(八位)补码来计算如下。
23 的补码=0001 0111
-9 的补码=1111 0111
--相加-----------
得: (1) 0000 1110 = 14 的补码
借助于补码,就用加法,实现了减法运算。
一般的计算,是用十进制来进行的。
如果限定了参加计算的“位数”,就会发生不同寻常的事。
比如,限定,使用两位数:00~99。
那么,-1 和 +99,功能就是相同的:
25 - 1 = 24
25 + 99 = (一百) 24
在这里,99,就是-1 的补数。
一百,就是 10^2,则称为:计数周期。
计算公式: 补数 99 + |-1 | = 周期。
------------------------
计算机使用二进制,补数,就改称为:补码。
八位机,就是用 8 位二进制,来参加计算。
计数范围:0000 0000~1111 1111(十进制 255)。
周期就是:2^8 = 256。
那么:
-1 的补码,就是 256-1 = 255 = 1111 1111。
-2 的补码,就是 256-2 = 254 = 1111 1110。
。。。
求补码的通用公式,就是:周期 + 负数。
并不需要借助于原码和反码。
------------------------
在计算机中,利用补码,就能:用加法代替减法运算。
因此,就可以简化计算机的硬件。
例如,用补码计算: 3 + (-1) = 2。
0000 0011 (= 3)
+ 1111 1111 (用 255 当做-1)
---------------------
(1) 0000 0010 (= 2)
舍弃进位,只取八位,结果就完全正确。
------------------------
补码,就是补码。
补码和原码反码,并没有任何关系。
补码的表示方法是:
正数的补码就是其本身
负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补
运用:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理。
计算
1、正数
正整数的补码是其二进制表示,与原码相同。
例如:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
2、负数
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1。
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
例如:求-5的补码。-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)。所以-5的补码是11111011。
3、0的补码
[+0]补=[+0]反=[+0]原=00000000
[ -0]补=11111111+1=00000000
扩展资料
补码乘法
补码的乘法不具备【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
原码
原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。
参考资料来源:百度百科-补码
参考资料来源:百度百科-原码