目录

1.前言2.机器数
3.真值
4.原码
5.反码
6.补码

1.前言

上篇博文中,笔者介绍了计算机存储器存储容量大小的常用单位 。在未来,我们还会接触到各种各样的数据类型,并且这些数据在运算的过程中会占用电脑的内存。而参与计算机运算的数,从根本上来讲有两大类:有符号数和无符号数。那么计算机如何去判断一个有符号数的正负呢?这就需要我们对机器数、真值、原码、反码和补码有所了解(网上也有许多质量优秀的教程,笔者在此仅作总结归纳)。

2.机器数

机器数 英文名 computer number 。它是将符号 “数字化” 的数,是数字在计算机中的二进制表示形式(存在正负之分)。在一串二进制码中,用最高位来表示正负,“0” 代表正、“1” 代表负。

0111,最高位(左边第一个红色数字,也叫符号位)用来表示符号的正负,由 “0”可知该数的符号为正,所以二进制码 0111 转换成十进制为 7。同理,二进制码 1111 转换成十进制为 -7。二进制码 001001转换成十进制为 9。而以上的 0111 、1111 和 01001 就是机器数。

拓展:机器数的2个特点:

①符号数字化(即“0” 代表正、“1” 代表负)。

②大小受机器字长的限制。

3.真值

真值 就是机器数所对应的真实的值。因为机器数的最高位(符号位)只用来判断符号的正负,得到的并不是表面上展现的值(形式值),所以需要借助 真值 来表示它实际的值。

例:二进制码 1111 不考虑最高位(符号位)用来判断正负,其值转换成十进制应该是15(形式值),实际上最高位(符号位)用来判断正负,所以它转换成十进制的真值应该是 +7,而不是15。同理:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1。综上所述,带符号位的机器数所对应的真正数值,也可称为机器数的真值。

4.原码

原码 是一种计算机中对数字的二进制定点表示方法,是最简单的机器数表示法。用最高位表示符号即(“0” 代表正、“1” 代表负),其他位存放该数的二进制的绝对值。

例: 用8位二进制表示一个数,+11 的原码为 00001011,-11 的原码就是 10001011。

拓展:原码的特点:

①原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为 0,负数该位为 1(0有两种表示:+0 和 -0),其余位表示数值的大小。

②原码不能直接参加运算,可能会出错。因为原码最大的问题就在于一个数加上他的相反数不等于零。例如:0001+1001=1010 (1+(-1)=-2) 0010+1010=1100 (2+(-2)=-4)。

5.反码

反码 是数值存储的一种,多应用于系统环境设置。它的表示方式为:正数的反码是其本身(原码),负数的反码就是他的原码除符号位之外,按位取反。

例: [+1] = [00000001]原 = [00000001]反
            [-1] = [10000001]原 = [11111110]反

6.补码

补码 是用来解决负数在计算机中的表示问题的。它的表示方法是:
正数的补码就是其本身(原码),负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

例:[+1] = [00000001]原 = [00000001]反 = [00000001]补
            [-1] = [10000001]原 = [11111110]反 = [11111111]补

拓展:为什么要使用原码、反码和补码?

简言之,简化电脑运算,使之不出错。