数据表示
- 一、数据表示
- 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、什么情况下补移码等于补码的符号位取反?

