在学习原码、反码、补码之前,需要先了解机器数和真值的概念。
一、机器数和真值
1、机器数
机器数是在计算机中用二进制
形式表示的数字。它可以是整数、浮点数等各种数值类型。
在计算机内部,数字以二进制位的形式存储,这些二进制位被解释为不同的数据类型,如整数、浮点数等。
比如十进制数 +3
,计算机字长为8位,那么转换成二进制就是 00000011
。
如果是十进制数 -3
,那么转换成二进制数就是 10000011
。第一位为符号位,最高位1
表示负数。
这里的 00000011
和 10000011
就是机器数。
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)
补码的加法运算与正数和负数的加法运算一致,无需额外的步骤或逻辑。这是因为补码的加法运算将正数和负数都视为相同的二进制操作。
补码存储方式在数值表示、运算和处理负数等方面提供了很多优势,使得计算机可以更有效地进行各种数值计算和处理。