# 数值数据的表示
# 数的机器码表示
# 原码
定点小数 x 的原码形式
[x]原={x1+∣x∣0≤x<1−1<x≤0
定点整数 x 的原码形式
[x]原={x2n+∣x∣0≤x<2n−2n<x≤0
# 反码
真值 0 有两种不同的表示
可以直接进行运算,但是需要采用循环进位的方式
也称为 1 的补码,符号位和原码相同
- 真值为正数,反码和原码相同
- 真值为负数,反码数值位为真值数值位取反
根据反码编码规则可知
⚠️当真值 x 是负数时 [x]反+∣x∣ 的值为全 1 编码
-
全 1 编码在定点小数中的值为
2−2−n
-
全 1 编码在定点整数中的值为
2n+1−1
定点小数 x 的反码形式
[x]反={x(2−2−n)+x0≤x<1−1<x≤0
定点整数 x 的反码形式
[x]反={x(2n+1−1)+x0≤x<2n−2n<x≤0
# 补码
0 的表示唯一
多出一个编码状态,在定点小数中是 −1,在定点整数中是 −2n
计算机中二进制有字长限制,数据最高位进位的位权值就是模数,计算机二进制数据的运算会将超过模数的部分自动舍去,属于典型的有模运算
定点小数 x 的补码形式
因为模为最高位进位的权值,所以模为 2
[x]补={x2+x0≤x<1−1<x≤0(mod2)
定点整数 x 的补码形式
共有 n+1 位,模数为 2^
[x]补={x2n+1+x0≤x<2n−2n<x≤0(mod2n+1)
# 求补码的方法
符号位不变,对于数据位:
- 反码法:对真值 取反 + 1
- 扫描法:对真值从右往左扫描,右边起第一个 1 及其右边的 0 保持不变,其余各位求反
# 变形补码
用两个二进制位表述数据的符号,其余与补码相同
- 00 表示正数,11 表示负数
- ❗️01 表示运算出现正溢出,10 表示运算出现负溢出
定点小数 x 的变形补码形式
模为 4
[x]补={x4+x0≤x<1−1<x≤0(mod4)
定点整数 x 的补码形式
共有 n+2 位,模数为 2^
[x]补={x2n+2+x0≤x<2n−2n<x≤0(mod2n+2)
# 移码
0 的表示唯一,1000...0
只用于定点整数的表示,常用于浮点数的阶码
[x]移=x+2n,−2n≤x<2n
对比可知
[x]补=[x]移+2n(mod2n+1)
- 移码和补码的符号位相反,数值位相同
- 移码的符号位 0 表示负数, 1 表示正数
- 移码中的 0 表示唯一,为 1000...0
# 四种机器码的总结
![]()
负数的反码和补码比大小:
比较数值部分,数值部分越大,真值越大(更靠近 0),绝对值越小
# 定点数表示
计算机中的表示形式:
![]()
定点数的范围:
![]()
数轴表示:
- 对于定点整数,最小刻度间距是 1
- 对于定点小数,最小刻度间距是 2^
当数据大于最大正数时,发生正上溢;当数据小于最小负数时,发生负上溢;所有不在数轴刻度上的纯小数都超出了定点小数所能表示的精度,无法表示,此时发生精度溢出
![]()
# 浮点数表示
# 表示形式
N=2E×M=2±e×(±0.m)
表示为两部分
- 阶码 E
- 阶码 E 是定点整数
- 阶码的位数决定数据表示的范围,位数越多,数据表示范围越大
- 尾数 M
- 尾数 M 是定点小数
- 在阶码长度相同时,尾码的位数越多,精度越高
![]()
# 表示范围
正数:
- 最大值:阶码最大值,尾数最大值
- 最小值:阶码最小值,尾数为正数最小值
负数:
- 最大值:阶码最小值,尾数为负数最大值
- 最小值:阶码最大值,尾数为负数最小值
阶码每变化一个刻度,数据就变大一倍,所以刻度不均匀
![]()
# 规格化
有两种规格化数:
-
尾数的绝对值应大于或等于 (0.1)2 或 (0.5)_
-
尾数的绝对值大于 1,小于 2
N=2E×M=2±e×(±1.m), (1≤∣M∣<2)
❗️ 在实际表示的时候将最高有效位上的 1 隐藏
# IEEE 754 单精度浮点数
32 位单精度浮点数:
阶码 E 采用移码表示,偏移量是 127
- 偏移量越大,移码最大值最小值越小,非规格化精度越高,规格化数表示范围越小
- 采用 127 偏移量的原因是使得任何一个规格化数的倒数能用另一个浮点数表示
尾数 M 为定点小数,完整形式为 1.M
# 数据信息的校验