【软考】(四)原码、反码、补码

本文详细解释了数制的概念,包括二进制、十进制等,并深入探讨了机器数、真值、原码、反码、补码的定义和应用。通过对比分析,揭示了每种表示方式的特点及其在计算机运算中的作用。


什么是数制?用来表示数值的规则,如十进制,二进制.


机器数

用二进制的形式来表示数;最高位为符号位,1表示负数,0表示正数.

:  1---->00000001;-1---->1000 0001

真值

从上面我们知道了机器数是计算机用来表示数的一种形式,但是用于最高位是符号位。这样就出现这样情况,1000 0001表示的真正数值为1,而不是129.这样我们把一个机器数表示的真正的实际的意义的值称之为真值。

原码、反码、补码

总体上来讲原码反码补码都是计算机本身用来存储数的一种方式。


原码

规则:符号位+真值的绝对值

如:[+1]原码=0000 0001

        [-1]原码=1000 0001

反码

规则:正数反码为本身

            负数反码为原码的取反,但符号位不变

如:[+1]原码=[+1]反码=0000 0001

        [-1]原码=1000 0001=[-1]反码=1111 1110;

 

补码

规则:正数补码为本身

            负数补码为原码的反码的基础之上加1

如:[+1]原码=[+1]补码;

        [-1]原码=1000 0001=[-1]反码=1111 1110=[-1]补码=1111 1111


为何会出现三种表示方式?


通过上面三种我们得到正数1在各种情况下都是一致的:[+1]\\补码=0000 00001

而反码不是一致的。

 

在计算机内部,为了将运算变得简单。将符号位也投入到运算之中来,这样不需要计算机去分析符号位的作用。但是我们发现

[+1]原码=0000 0001+[-1]原码=1000 0001=0000 00001=1;而不是0,这样一来就出现了错误。如何解决这个问题呢?


为了解决这个问题,反码出现了

[+1]原码+[-1]原码=1000 0001=[+1]反码=0000 0001+[-1]反码=1111 1110=0000 0000(反码)=0000 0000 (原码)=-0


这样一来解决了原码之间运算的问题,但是问题又出现了-0=1000 0000(原码);+0=0000 0000 (原码);这样在计算机看来不一样。是没有意义的。

[+1]原码+[-1]原码=1000 0001=[+1]补码=0000 0001+[-1]补码=1111 1111=0000 0000(补码)=[0000 0000](原码)

这样用[0000 0000](原码)表示0就不会出现问题了。



总的来说,在整数中,原码和补码、反码都是一样的,对于负数反码在符号位不变的情况下各位取反所得;补码为反码基础上加1.而原码补码反码的出现都是为了满足在计算机在运算过程更加简单和便捷而出现的。

 

 

转载于:https://www.cnblogs.com/guziming/p/4232688.html

首先,我们需要了解如何将十进制转换成二进制的原码反码补码。 1. **原码**:正数直接表示,负数则最高位为1(对于有符号整数)。 - **95 (十进制)**: 原码 = 000001010101(因为95在8位内,不足8位补0) - **-131 (十进制)**: 原码 = 111110100011 (负数最高位为1) 2. **反码**:对原码取反,然后加1(对于有符号整数)。负数的反码是除符号位外全变1。 - **95 (十进制)**: 反码 = 111110101010 (+95的反码) - **-131 (十进制)**: 反码 = 000001011100 (-131的反码) 3. **补码**:也是对原码取反,然后加1,但对于负数,有一个特殊情况:零的补码等于其本身。 - **95 (十进制)**: 补码 = 111110101010 (+95的补码,无需调整) - **-131 (十进制)**: 补码 = 000001011101 (-131的补码,注意最后一位由1变为0) 4. **浮点数的原码反码补码**: - **0.125 (十进制)**: 由于是小数,通常会采用偏移二进制表示法,即在最高位后面跟上实际值的二进制。0.125 = 1 / 8 = 0.00011001... - 原码 = 000000000000011001000... (保留足够位数) - 反码 = 11111111111110011111100... (先取反再加1) - 补码 = 11111111111110011111100... (小数部分不变,不需要加1) - **-0.875 (十进制)**: 同样是小数,可以将其转化为二进制形式 -0.125 * 8 = -1 = -1000... - 原码 = 100000000000001110000... (带符号,注意最左一位) - 反码 = 01111111111111000111100... (先取反再加1) - 补码 = 01111111111111000111100... (小数部分不变,不需要加1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值