数据表示
- 一、数据表示
- 1、整数的表示
- (1) 原码
- (2) 反码
- (3) 补码:
- (4) 移码
- 2、浮点数的表示(IEEE 754标准)
一、数据表示
计算机使用的是二进制,也就是0
和1
的组合。所有的数据,无论是数字、文字还是图片、声音,最终都要转换成二进制形式存储和处理。
1、整数的表示
(1) 原码
-
定义:最高位为符号位 (0正1负),其余为数值位。
-
例:
+5 → 00000101
-5 → 10000101
-
设计目的:直观表示正负数。
-
不足 :
1、运算复杂:加减法需判断符号位,硬件电路设计复杂。
2、零的冗余:存在+0(00000000)
和-0(10000000)
,浪费编码空间。
(2) 反码
-
定义:(0正1负) 正数同原码;负数符号位不变,其余位取反。
-
例:
+5 → 00000101
-5 → 11111010
-
设计目的: 简化减法运算,将减法转换为加法。 通过取反操作,负数可直接参与加法运算。例如:
5 - 3 = 5 + (-3)
,硬件只需加法器即可实现减法。 -
不足:
1、循环进位问题:最高位进位需循环加到最低位(如 -0 的计算)。
2、零的冗余:仍存在+0(00000000)
和-0(11111111)
。
(3) 补码:
-
定义:(0正1负) 正数同原码;负数为
反码+1
。 -
例:
+5 → 00000101
-5 → 11111011
(反码11111010 +1
) -
设计目的:
1、统一加减法运算,消除零冗余,简化硬件设计。
2、唯一零表示:0
仅对应00000000
,无冗余。问:补码10000000
表示多少?(答案在文章末尾)
3、自然溢出处理:溢出结果直接截断,无需额外电路。
4、符号位参与运算:符号位与数值位统一处理,无需特殊判断。
(4) 移码
-
定义:移码(Excess-K,又称偏移二进制码)是一种用于浮点数指数部分的编码方式,其核心思想是通过固定偏移量
K
使所有数值均为正数,便于硬件比较大小。通常用于浮点数的指数部分(如IEEE 754中的偏移量127/1023)。 -
例(8位移码,K=127):
0 → 127 → 01111111
-127 → 0 → 00000000
-
设计目的:便于浮点数比较,避免符号位干扰指数大小判断。
优势:移码的二进制大小顺序与数值的实际大小顺序一致。
上点难度,附加题:什么情况下移码等于补码的符号位取反?(答案在文章末尾)
2、浮点数的表示(IEEE 754标准)
-
方式:
- 单精度(
32位
):1位符号(S) + 8位指数(E,偏移量127) + 23位尾数(M)。 - 双精度(
64位
):1位符号 + 11位指数(偏移量1023) + 52位尾数。
- 单精度(
-
定义:
浮点数是计算机用来表示小数或超大/超小数字的一种方式,类似科学计数法。例如0.123 = 1.23 × 10⁻¹
- 符号位(Sign):表示正负(0=正,1=负)。
- 指数部分(Exponent):决定数字的“缩放倍数”(比如
10⁻¹
里的1
)使用移码表示。 - 尾数部分(Mantissa):尾数存储的是二进制小数部分(比如
1.23
的23
)
-
例子:
IEEE 754标准(最常用的浮点数格式)
以 32位单精度浮点数(float) 为例:符号位(1位) 指数部分(8位) 尾数部分(23位) S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
例:0.5
→ 二进制0.1
→ 规格化为1.0×2⁻¹
,符号位0
,指数-1+127=126 → 01111110
,尾数0 → 0 01111110 000...0
。
- 特殊值:
答案:1、补码
10000000
表示-128
。反码:10000000
→ 符号位1
,数值部分取反为1111111
。
补码:反码 +1 →1111111 + 1 = 10000000
(进位溢出被截断)。 结果:-128
(补码的特殊设计)。·
2、什么情况下补移码等于补码的符号位取反?