原码反码补码

阅读量: 154 编辑

在学习原码、反码、补码之前,需要先了解机器数和真值的概念。

一、机器数和真值

1、机器数

机器数是在计算机中用二进制形式表示的数字。它可以是整数、浮点数等各种数值类型。

在计算机内部,数字以二进制位的形式存储,这些二进制位被解释为不同的数据类型,如整数、浮点数等。

比如十进制数 +3 ,计算机字长为8位,那么转换成二进制就是 00000011

如果是十进制数 -3,那么转换成二进制数就是 10000011。第一位为符号位,最高位1表示负数。

这里的 0000001110000011 就是机器数。

2、真值

真值是机器数所代表的实际数值,即在现实世界中的数值。

但是机器数的第一位为符号位,所以机器数的形式值就不等于真值的数值。

如上面有符号数的例子,10000011 其最高位 1 代表负数。所以,机器数和真值之间的表示要区分符号位。

例如:

0000 0001 的真值是 +000 0001 就是 +1;

1000 1001 的真值是 -000 0001 就是 -1;

在计算机中,由于有限的位数和精度限制,机器数可能无法精确地表示真实的实数,因此真值与机器数之间可能存在舍入误差。

二、数的原码、反码和补码表示

原码、反码、补码是计算机存储一个具体数字的编码方式。数值在计算机中是以补码的方式存储的。

1、原码

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

比如 8 位的二进制:

+1的原码是:0000 0001

-1的原码是:1000 0001

因为第一位是符号位,所以 8 位二进制的取值范围就是:

10000000 ~ 0111 1111

也就是

-128 ~ 127

2、反码

反码表示法是:

正数的反码是其本身;

负数的反码是在其原码的基础上,符号位不变,其余各位取反。

[+1]原 = [0000 0001]原 = [0000 0001]反

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

3、补码

补码表示法是:

正数的补码是其本身;

负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)

[+1]原 = [0000 0001]原 = [0000 0001]反 = [0000 0001]补

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

4、补码的优势

补码表示法能够统一地表示正数和负数,而无需使用额外的标志位。这简化了运算和判断。

-3 的补码表示:10000011

+2 的补码表示:00000010

  10000011    (-3)
+ 00000010    (+2)
-----------
  10000101    (-1)

补码的加法运算与正数和负数的加法运算一致,无需额外的步骤或逻辑。这是因为补码的加法运算将正数和负数都视为相同的二进制操作。

补码存储方式在数值表示、运算和处理负数等方面提供了很多优势,使得计算机可以更有效地进行各种数值计算和处理。

爱码岛编程公众号
微信扫码关注
爱码岛编程小程序
微信扫码打开
苏ICP备13052010号
©2023 南京匠成信息科技有限公司