CrazyAdam 发表于 2023-8-2 22:26:37

什么是原码,反码以及补码

1、概念

计算机底层存储数据时,存储的是数据对应的二进制数字。对于整型数据,其二进制表示形式有三种,分别是:原码、反码、补码,而实际存储的是整型数据的补码。
原码、反码以及补码都是有符号的,其中最高位存放符号位,0 表示正数,1 则表示负数。
1. 原码:最高位表示正负,其余位表示数值。例如十进制的正负 1,用 8 位二进制的原码表示:

+1=原,-1=原
2. 反码:正数的反码和原码相同;负数的反码是在原码的基础上,符号位不变,其余位按位取反。

+1=反,-1=反
3. 补码:正数的补码和原码也相同;负数的补码是在反码的基础上加 1。

+1=【00000001】补,-1=【111111111】补


正数的原码,反码和补码都相同,就不举例说明
比如:一个负数的补码是10001101,那它的反码为10001100,原码为11110011。
符号公式:(n-1)

二、补码的意义
我们人脑可以知道最高位是符号位,在计算的时候就会根据符号位进行加减,但是对于计算机,加减乘除已经是最基础的运算,因此要设计得尽量简单,而让计算机辨别符号位会让计算机的基础电路设计变得复杂。于是人们开始探索将符号位参与运算,并只保留加法的方法,根据运算法则,减去一个数等于加上这个数的负数,即 1 - 1 = 1 + (-1)。
1. 使用原码运算:

1-1=1+(-1)=原+原=原=-2
所以让符号位也参与运算时,使用原码,对于减法运算来说,结果是不正确的。这也是计算机内存在存储数据时不使用原码的原因。为了解决这一问题,就出现了反码。

2. 使用反码运算:

1-1=1+(-1)=反+反=反=原=-0
使用反码的问题在于 0 的符号是负号,而且 原 和 原 都表示 0。为了解决这一问题,就出现了补码

2. 使用补码运算:

1-1=1+(-1)=补+补=反=原=0
这样就不存在 -0 的问题了。



页: [1]
查看完整版本: 什么是原码,反码以及补码