首页 > 编程知识 正文

原码反码补码转换例题(原码反码补码概念)

时间:2023-05-04 17:31:19 阅读:102244 作者:4148

众所周知,数据是以一定的编码存储在计算机中的。数据在计算机中可以用原码、补码和补码来表示。但是在介绍原码、补码和补码之前,我需要先介绍两个概念:机器数量和真值。

00-1010机号所谓机号,就是计算机中一个数字的二进制表示。机器号是有符号位,符号位是最高位,0表示正,1表示负。

例如,转换为二进制数的十进制数3是0000 0011,而转换为二进制数的十进制数-3是1000 0011。0000 0011和1000 0011这里是所谓的机号。

真值所谓真值就是机器编号所代表的真实数值。因为机器号包含符号位,转换后的二进制成为形式值。

例如,1000 0001的形式值为129,但其实际值为-1。因此,在计算真值时,符号位仅用于指示值是正还是负,而不参与值的计算。

机器数和真值

首先,计算机存储数字时,需要遵循一定的规则,这就是所谓的编码。原码、补码和补码是计算机存储数字的不同方式。

原码所谓原码,就是机器数量没有转换。它的真值是通过将符号位和剩余位相加计算出来的数字。

例如,1的原始代码是0000 0001,而-1的原始代码是1000 0001。

对于原代码,由于第一位作为符号位,所以是8位二进制数,其表示范围为[-127,127]。

至于转换规则,也很简单。对于正数,转换后的二进制数是原始代码。对于负数,只需将转换后的二进制数的最高位改为1。

所谓反码,就是如果数字是正数,就不需要任何转换;如果数字为负,符号位保持不变,其余位反转。

例如,1的倒数是0000 0001,-1的倒数是1111 1110。

对于反码,与原码类似,因为第一位用作符号位,所以表达式范围也是[-127,127]。

从上面的例子可以看出,如果一个数是负数,则用反码表示法不能直接得到反码所表示的真实数值,需要先转换成原码再进行计算。

将反码转换为原码的方式是:符号位保持不变,其余位逐位反转。

所谓补码,就是如果数是正数,就不需要任何转换;如果数为负数,符号位保持不变,其余位逐位求反后加1,即先求数的补码后加1。

比如1的补码是0000 0001,而-1的补码是1111 1111。

对于补码,虽然最高位也用作符号位,但可以表示-128,因此其取值范围为[-128,127]。

同样,如果一个数是负数,用补码的方法也不能直接得到补码所代表的真实数值,还需要转换成原码才能计算。

补码转换为原码的方式是:补码减1后,符号位保持不变,其余位逐位反相。

00-1010通过上面的介绍,我们发现了一个问题。原始代码是对人最好的代码,那么为什么我们有补语和补语呢?

首先,存储在计算机中的数值不仅用于显示,还需要参与各种计算。如果我们进行计算,我们可以很容易地分离符号位,在添加符号位之前计算除符号位之外的其余位。然而,这对计算机来说更困难。最好的方法是在操作中包含符号位。这样,像1-1这样的问题就转化为1 (-1)的问题,即减法转化为加法。

但想法是好的,但现实是残酷的。当使用原始代码进行计算时,永远无法获得正确的值。

当使用原始代码进行计算时,例如:1-1=1(-1)=(0000 0001)(1000 001)=1000 0010=-2。

因此,为了解决减法计算的问题,出现了反码。

当使用反码进行计算时,例如:1-1=1(-1)=(0000 0001)(1111 1110)=1111 1111

此时1111 1111是反码表示形式,原码为1000 0000,即-0。

虽然在我们的认知中,0和-0都是0,但是计算机用两个二进制值来表示0还是有些不合适的。因此,用反码表示数值并不完美。

因此,为了解决0和-0的表示问题,补码出现了。

当补码用于计算时,例如:1-1=1(-1)=(0000 0001)(1111 1111)=(1)0000 000。因为超出位数,应该存在的最高位的1会丢失,所以结果是:0000 0000。

此时0000 0000为补码,转换为原码后为0000 0000,取值为0,符合预期结果。

另一个例子:-1-127=(-1)(-127)=(1111 1111)(1000 001)=(1)1000 000。同样,最高位1将丢失,因此结果为1000 0000。

此时1000 0000是补码,可以用来表示-128。但需要强调的是,由补码表示的-128,转换后的原码为-0,所以-128只有补码的表示。

此后,原码、补码和补码的介绍就完成了。希望大家都能掌握。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。