如何求补码

如何求补码,第1张

回答问题之前先让我们来了解一下:

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1。

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1 (即在反码的基础上+1)。

因此我们在求一个数的补码之前,应当先求出这个数的原码。

将一个数转化为二进制数,既是它的源码。可通过除二求余法算得(既对一个数除二求余,这会得出一个数和一个余数,再对得出来的数进行求余,得出余数,以此类推,最后将余数倒写即可)。

如是一个正数,它的补码与它的原码相同;如果是一个负数,它的补码是在它的原码的基础上,开头符号位不变,其余各位取反,最后再在其上面+1(既在反码的基础上+1)。

正数的补码,是其本身。

负数的补码,就用它的正数,减一取反,即可得到补码。

如,已知:+9 补码是:0000 1001。

下面求-9 补码:

先减一:0000 1001 - 1 = 0000 1000;

再取反:1111 0111。

所以有:-9 补码 = 1111 0111。

这不就完了吗?

简不简单?意不意外?

原码反码符号位,讨论这些垃圾干嘛?

不都是骗人的吗?

计算机中,并没有原码和反码,只是使用补码,代表正负数。

使用补码的意义:可以把减法或负数,转换为加法运算。从而简化计算机的硬件。

------------

比如钟表,时针转一圈,周期是 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 的补码

舍弃进位,只保留八位,作为结果即可。

这就是:使用补码,加法就代替了减法。

所以,在计算机中,有一个加法器,就够用了。

原码和反码,都没有这种功能。

------------

原码和反码,毫无用处。计算机中,根本就没有它们。

补码的算法如下:

一、补码加法
[X+Y]补 = [X]补 + [Y]补
例:X=+0110011,Y=-0101001,求[X+Y]补
[X]补=00110011 [Y]补=11010111
[X+Y]补 = [X]补 + [Y]补 = 00110011+11010111=00001010
注:因为计算机中运算器的位长是固定的,上述运算中产生的最高位进位将丢掉,所以结果不是100001010,而是00001010。

二、补码减法
[X-Y]补 = [X]补 - [Y]补 = [X]补 + [-Y]补
其中[-Y]补称为负补,求负补的方法是:负数的绝对值的原码所有位按位取反;然后整个数加1。
例:1+(-1)[十进制]
1的原码00000001 转换成补码:00000001
-1的原码10000001 转换成补码:11111111
1+(-1)=0
00000001+11111111=00000000
00000000转换成十进制为0
0=0所以运算正确。

三、补码乘法
设被乘数X补=X0X1X2……Xn-1,乘数Y补=Y0Y1Y2……Yn-1。
XY补=X补×Y补,即乘数(被乘数)相乘的补码等于补码的相乘。

补码的含义:

计算机中的有符号数有三种表示方法,即原码、反码和补码。三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位,三种表示方法各不相同。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理 。

补码相加后的结果:1010 1100 是答案的补码,要转化成原码,才是最终答案

补码转原码方法同原码转补码,即符号位不变,其余按位取反后+1

1010 1100

求反:1101 0011

求补:1101 0100

即:-84

这里用到了补码的运算规则:[X+Y]补=[X]补+[Y]补

求出[X]补+[Y]补后还要求一次补,才能得到答案X+Y

扩展资料:

补码运算原理: 在计算机里,如果我们要计算5-3的值,我们既可以用5减去3,也可以用5加上13。

这就像我们的钟表,它从1点走到12点之后,又回到了1点。我们的计算机也是,从0走到15之后,再往下走就又回到了0,就像我们转了一个圈一样。我们从5这个位置往回退3个格,就完成了5-3这个计算。

我们也可以从5这个位置往前走,一直走到15,这时我们走了10个格,然后我们继续往前走,走到0,然后到1,然后就走到了2。这样,我们往前走了13个格之后,也到了2这个位置。

所以说,在我们这个计算机中,减3和加13是一样的。而3+13=16,我们说在模16的系统下,3和13是互补的。

这样,我们计算5-3就可以换成5+13。3的二进制表示为0011,5的二进制表示为0101。这样,0101-0011就可以表示为0101+(-0011)。

我们在计算机中都是把负数用其补码表示,-0011的补码就是10000-0011(即16-3,也就是13)。10000-0011=1+1111-0011=1+(1111-0011)=1+1100=1101。

我们总说补码是“按位取反再加一”,看了上面这个式子相信大家就会明白了,其实就是把10000-0011换成了1111-0011再加1的形式。

然后,0101-0011就换成了0101+1101,它们计算出来的结果为10010。由于我们的计算机只有四个bit,所以结果为0010。即,在模16的计算机中,5-3=5+13=2。

参考资料:

补码_百度百科 

在计算机系统中,数值,一律用补码来表示和存放。

原码和反码,在计算机中,都是不存在的。

使用补码代表正负数值,可将负数,转换成正数来计算。

这就可以节省硬件,只用加法器,便可实现加减法运算。

补码,是是什么意思? 这得从补数谈起。

计算机所计算的位数,是固定的,如八位机。。。

位数限定之后,其计数范围,就有了周期性。

如两位十进制 0~99,周期就是 100(一百)。

那么,减一,就可以用 +99 代替:

 25 - 1 = 24

 25 + 99 = (一百) 24

舍弃进位,只取两位,这两种算法,功能就是相同的。

这就用正数,代替了负数! 用加法,就实现了减法运算!

99,就是-1 的补数。 计算公式:补数 = 周期 + 负数。

学过三角函数的同学,都知道,函数周期是:2π(360°)。

那么-90°,也可以+270° 来计算。 这也是同样的道理。

一个负角度,怎么计算出“等效的正角度”,大家都会。

-------------------------

计算机用二进制,补数,就改称为:补码

八位二进制:0000 0000 ~ 1111 1111。

对应十进制:0 ~ 255。

计数周期是:2^8 = 256。

那么,

-1 的补码是 256 + (-1) = 255 = 1111 1111(二进制)。

-2 的补码是:254 = 1111 1110。

。。。

-128 的补码是:128 = 1000 0000。

用不存在的“原码反码取反加一”来求,也是这个结果。

求负数补码的计算公式,也是: 周期 + 该负数。

正数,也可以使用这个公式。但是,计算后,这个周期的数值,

超出了计数范围,就略去了。 最后,还是这个正数。

-------------------------

例如: 7-3 = 4。

补码的计算过程如下:

7 的补码=0000 0111

 -3的补码=1111 1101

--相加-------------

 得(1)   0000 0100 = 4 的补码

舍弃进位,只保留八位作为结果,就求出了 7-3。

-------------------------

原码和反码,在计算机中,都是不存在的,无用的。

它们不过是,计算机老师捧在手中的饭碗而已。

运用:在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理。

计算

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

扩展资料

补码乘法

补码的乘法不具备XY补=X补×Y补的性质。但是XY补==X补×Y,所得结果再取补码,如x=101,y=011,[xy]补=-[(-101)011]=-[011011]=-01001=10111。

其中,若Y补=y31y30……y0,则 Y=-y312^31+y302^30+……+y02^0

原码

原码(true form)是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。

参考资料来源:百度百科-补码

参考资料来源:百度百科-原码


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/10354953.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-07
下一篇 2023-05-07

发表评论

登录后才能评论

评论列表(0条)

保存