数据表示与运算
00:00
数据表示与运算:数值编码、浮点标准、定点运算、溢出检测与校验码
1. 数值编码
1.1 原码
最高位为符号位(0正1负),其余位为绝对值:
8 位原码范围:,0 有两种表示(+0 和 -0)。
1.2 反码
正数与原码相同,负数符号位为1,数值位按位取反:
1.3 补码
计算机中最常用的整数表示法:
关键性质:
- 补码 = 反码 + 1(负数)
- 0 的补码唯一
- 位补码范围:
- 补码加减法统一为加法
快速求补码:从最低位到第一个1保持不变,其余位取反。
1.4 移码
补码的符号位取反,用于浮点数的阶码表示:
移码保持了数值的大小顺序,便于比较大小。
2. 定点运算
2.1 补码加法
符号位参与运算,进位自然丢弃。
2.2 补码减法
其中 为 的各位取反加1。
2.3 溢出检测
单符号位法:
- :无溢出
- :溢出
双符号位法(变形补码):
- :结果为正,无溢出
- :正溢出
- :负溢出
- :结果为负,无溢出
2.4 定点乘法
原码一位乘法:
- 符号位单独处理:
- 数值部分:被乘数加或不加(根据乘数位),然后右移
补码一位乘法(Booth 算法):
根据乘数末两位的差值决定操作:
| 操作 | ||
|---|---|---|
| 0 | 0 | 右移一位 |
| 0 | 1 | 加 ,右移一位 |
| 1 | 0 | 加 ,右移一位 |
| 1 | 1 | 右移一位 |
3. 浮点数表示
3.1 IEEE 754 标准
浮点数格式:
| 参数 | 单精度(32位) | 双精度(64位) |
|---|---|---|
| 符号位 S | 1 位 | 1 位 |
| 阶码 E | 8 位 | 11 位 |
| 尾数 M | 23 位 | 52 位 |
| 偏置值 | 127 | 1023 |
| 阶码范围 | 1~254 | 1~2046 |
| 规格化范围 |
3.2 特殊值
| 阶码 E | 尾数 M | 含义 |
|---|---|---|
| 全0 | 全0 | ±0 |
| 全0 | 非零 | 非规格化数 |
| 全1 | 全0 | ±∞ |
| 全1 | 非零 | NaN |
3.3 非规格化数
当阶码全0、尾数非零时,表示非规格化数:
非规格化数填补了0和最小规格化数之间的间隙,实现渐进下溢。
3.4 浮点精度
单精度有效位数约 7 位十进制,双精度约 15~16 位十进制。
机器 epsilon:
4. 浮点运算
4.1 浮点加减法
- 对阶:小阶向大阶看齐,尾数右移
- 尾数加减:对阶后的尾数相加减
- 规格化:左规或右规使尾数满足 格式
- 舍入:按舍入模式处理超出位
- 溢出判断:检查阶码是否溢出
4.2 舍入模式
| 模式 | 说明 |
|---|---|
| 就近舍入 | 舍入到最接近的可表示值(默认) |
| 向0舍入 | 截断 |
| 向+∞舍入 | 向上取整 |
| 向-∞舍入 | 向下取整 |
就近舍入的”银行家舍入”规则:当恰好在中间时,舍入到偶数。
4.3 浮点乘除法
乘法:
除法:
5. 校验码
5.1 奇偶校验
在数据位后添加1位校验位,使1的个数为奇数(奇校验)或偶数(偶校验)。
- 只能检测奇数个错误
- 不能纠正错误
- 检错率:(对于 位数据)
5.2 海明码(Hamming Code)
在数据位之间插入 个校验位,满足:
其中 为数据位数, 为校验位数。
校验位位置:放在 的位置(第1、2、4、8…位)。
编码步骤:
- 确定校验位数
- 将数据位填入非 位置
- 每个校验位覆盖其位置二进制表示中对应位为1的所有位
- 计算各校验位的值
纠错能力:SEC-DED(单纠错双检错)
5.3 CRC 循环冗余校验
将数据视为多项式,用生成多项式除取余数作为校验码。
编码过程:
- 数据 左移 位( 为生成多项式阶数)
- 用生成多项式 模2除法取余数
- 发送
检错能力:
- 所有单比特错误
- 所有双比特错误(生成多项式包含 因子时)
- 所有奇数个比特错误
- 所有长度 的突发错误
5.4 校验码对比
| 校验码 | 冗余位 | 检错能力 | 纠错能力 | 应用 |
|---|---|---|---|---|
| 奇偶校验 | 1位 | 奇数个错 | 无 | 内存ECC基础 |
| 海明码 | 2位错 | 1位错 | ECC内存 | |
| CRC | 位 | 突发错误 | 无(可配合重传) | 网络通信 |