文章目录
1 无符号表示法
1.1 无符号表示法的特点
无符号表示法只能用于存储无符号整数,也就是正整数。
1.2 无符号表示法的存储步骤
无符号表示法存储步骤如下:
- 转换为二进制。
- 二进制位数不足n位的,左边(高位)补零。
举例:
复原就是存储步骤的逆运算。
2 符号加绝对值表示法(即原码,Sign and Magnitude)
2.1 符号加绝对值表示法的特点
在存储整数中并不常用,却通常用于存储模拟信号(存储音频的部分会用到)。
正号用0表示,负号用1表示,数值部分不变。
2.2 符号加绝对值表示法的存储步骤
符号加绝对值表示法的步骤如下:
- 将绝对值转换为二进制。
- 二进制位数不足n-1位的,左边(高位)补零。
- 加上符号位。
举例:
复原就是存储步骤的逆运算。
2.3 符号加绝对值表示法的缺点
符号加绝对值表示法虽然容易,但是具有如下缺点:
- 0的表示不唯一,故不利于程序员编程。
- 加、减运算方式不统一。
- 需额外对符号位进行处理,故不利于硬件设计。
- 特别当a < b时,实现a - b比较困难。
从50年代开始,整数都采用补码表示法,但浮点数的尾数用原码定点小数表示。
3 补码表示法(模运算,modular运算)
3.1 补码表示法的基本概念
重要概念: 在一个模运算系统中,一个数与它除以“模”后得余数等价。
现实世界中的模运算系统:时钟是一种模12系统。
我们可以得出如下结论:
- 一个负数的补码等于模减去该负数的绝对值。
- 对于某一确定的模,某数减去小于模的另一数,总可以用该数加上另一数负数的补码来代替。
这样通过补码(modular运算),我们就实现了+和-的统一。
补码的定义: 假设补码有n位,则[X]补 = 2 ^ n + X (-2 ^ (n-1) <= X < 2 ^ (n-1), mod 2 ^ n)。
3.2 如何取补码
取补码主要有如下两种方法:
取反加1:
通过如下的计算我们可以很清晰的看出为什么是取反加1:
从右边开始复制,直到复制第一个1然后其他位取反:
注: 将一个数连续取两次补码,最终得到原数。
求特殊数的补码:
3.3 补码表示法的存储步骤
无符号表示法的存储步骤如下:
- 将绝对值转换为二进制。
- 二进制位数不足n位的,左边(高位)补零。
- 如果要存储的整数是正数和0,则就这样存储;如果要存储的整数是负数,则取其补码进行存储。
举例:
3.4 补码表示法恢复原数的方式
理论做法:
实际上我们都是如果如下形式进行求补码的真值的:
规律:判断正负
- 转换结果的最高位是0,则被转换的数为正数,数值部分相同。
- 转换结果的最高位是1,则被转换的数为负数,数值各位取反,末位加1。
举例:
4 移码表示法(Excess biased notion)
4.1 移码表示法的概念
移码表示是指将每一个数值加上一个偏置常数(Excess/bias)。
4.2 移码表示法的操作方式
通常,当编码位数为n时,bias取2^(n-1)
或 2^(n-1) - 1(如IEEE754)。
(上图应该是当bias为2^(n-1) 时)
4.3 移码表示法的优点
使用移码表示法,便于浮点数加减时的对阶操作(比较大小)。
参考资料: