二进制与数据存储
电子数字计算机内部使用二进制来表示数据,所有信息(数字、文本、图像、音频等)都以二进制的形式存储和处理,这样做的原因有以下几点:
-
二进制只有两种状态,使用有两个稳定状态的物理器件就可以表示二进制数的每一位,制造成本比较低,例如用高低电平或电荷的正负极性都可以很方便地表示0和1。
-
二进制位 1 和 0 正好与逻辑值“真”和“假”相对应,为计算机实现逻辑运算和程序中的逻辑判断提供了便利条件。
-
二进制的编码和运算规则都很简单,通过逻辑门电路能方便地实现算术运算。
例如,寄存器中的二进制编码根据数值数据的编码格式和规则可能为下述四个数值:
这些二进制编码根据数值数据的编码格式和规则,可以表示不同的数值。计算机内部参与运算的数在计算机内部的表示格式如下,他们可以转换为人们日常生活中使用的数值(也称真值):
定点数与浮点数
定点数
定点数是一种简单的数值表示方法,它将数值的整数部分和小数部分固定在一个位置上。定点数的表示方式取决于其编码格式,常见的编码格式包括原码、补码、反码和移码(定点小数不采用移码)。
-
原码(Sign-Magnitude):最高位为符号位,0表示正数,1表示负数,其余位表示数值的绝对值。
-
反码(One’s Complement):正数的反码与原码相同,负数的反码是符号位不变,其余位取反。
-
补码(Two’s Complement):正数的补码与原码相同,负数的补码是反码加1。补码简化了加法运算,解决了正零和负零的问题,是现代计算机中广泛使用的编码方式。
-
移码(Offset Binary):主要用于浮点数的指数部分,通过偏移量将负数表示为正数,便于比较大小。
假设一个8位寄存器用于存储定点整数,其编码格式如下:
-
原码:最高位为符号位,其余位表示数值的绝对值:
01000001
表示 +111000001
表示-1
-
补码:正数的补码与原码相同,负数的补码是反码加1。
01000001
表示+111111111
表示-1
浮点数
浮点数用于表示实数,其表示方式遵循 IEEE 754
标准,浮点数的表示方式允许计算机处理非常大或非常小的数值,同时保持较高的精度。
浮点数的表示格式如下:
-
符号位(S):1位,0表示正数,1表示负数。
-
指数位(Exponent):用于表示数值的范围。
-
尾数位(Mantissa):用于表示数值的精度。
假设一个 32 位寄存器用于存储浮点数,其编码格式如下:
-
符号位(1位):
0
表示正数,1
表示负数。 -
指数位(8位):偏移量为127。
-
尾数位(23位):表示小数部分。
例如,浮点数 0 10000011 10010000000000000000000
的值计算如下:
-
符号位:
0
(正数) -
指数位:
10000011
= 131 -
尾数位:
1.10010000000000000000000
-
值: 1.1001 × 2 ( 131 − 127 ) = 1.1001 × 2 4 = 18 1.1001 × 2^{(131 - 127)} = 1.1001 × 2^4 = 18 1.1001×2(131−127)=1.1001×24=18