目录
一、计算机中的数值
1.1 有符号数
与无符号数 (即没有符号的数) 不同, 区分正负;最高位用"0"表示正, "1" 表示负号。
机器数: 把符号"数字化"的数称为机器数。
真值: 带 "+" 或 "-" 符号的数称为真值。
原码: 符号位"0"表示正数, "1"表示负数。数值位即真值的绝对值。
反码: 通常用来作为原码求补码, 或补码求原码的中间过渡。正数反码是其正数本身。
补码: 可以将减法操作化作加法操作, 即通过用负数的正补数来代替, 如: 负数加上它的模(如时钟在模12的情况下, 加-3等价于加9)。
正数与负数互为补数时, 其绝对值之和为模数。整数的补数为正数本身。
对于二进制数, 补码可以看作对其原码除符号位外, 每位求反, 末位加1。
各类机器数真值范围图:
移码: 针对补码无法直接比较大小而引出的一种表示法, 即对补码加上一个 , 即将最高位符号位取反。
1.2 定点数与浮点数
在计算机中, 小数点不用专门的器件表示, 而是按约定的方式标出, 即定点表示法和浮点表示法。
定点表示法: 小数点位于数符和第一数值之间时, 机器内的数为纯小数; 当小数点位于数值位之后时, 机器内的数为纯整数。
定点数示意图:
浮点表示: 小数点位置可以浮动的数。位数相同时,表示数值的范围比定点数大。将尾数最高位为1的浮点数称为规格化数, 此时精度最高。尾数是小数, 其位数n反映了浮点数的精度。
浮点数形式示意图:
举例:
浮点数的表示范围:
1.3 IEEE 754 标准
现代计算机中, 浮点数一般采用IEEE制定的国际标。阶码用移码表示, 即加上一个偏移量,如 01111111(7FH); 尾数部分通常用规划表示, 最高位总是1。在下图中, 指数部分\即阶码, 包含阶符。
表示形式示意图:
二、 定点运算
2.1 移位运算
通过移位运算与加减法运算可实现乘除运算。
算术移位规则:
2.2 加减法运算
现代计算机中都采用补码做加减法运算。
基本公式:
溢出判断: 用一位符号判断溢出, 两个符号相同, 结果与原操作数符号不同, 即为溢出 (加法中, 异号相加减不会溢出) 。
2.3 乘法运算
由笔算乘法规律可得, 乘法可由移位运算配合加法运算实现。
步骤:
1) 由乘数的末位值确定被乘数是否与原部分积相加, 然后右移一位, 形成新的部分积, 同时乘数也右移一位, 空出最高位放部分积的最低位。
2) 每次做加法时, 被乘数仅仅与原部分积的高位相加, 其低位被移至乘数所空出的高位位置。
示例图:
2.4 除法运算
由笔算乘法规律可得, 除法可由移位运算配合减法运算实现。实现除法运算时, 避免除数为0或者被除数为0。前者结果无限大, 后者结果总是0。
恢复余数法: 相减后, 当余数为负时, 需要加上除数, 将其恢复成原来的余数。
示例图:
加减交替法: 可以认为是恢复余数法的一种改进算法。设余数为R, 除数为y, 则:
1) R>0时, 上商"1", 再2R-y;
2) R<0时, 上商"0", 先R+y, 再左移一位-y, 即2(R+y)-y=2R+y。
示意图:
三、浮点四则运算
运算步骤:
1) 对阶, 使两数的小数点位置对齐, 按照小阶向大阶看齐的原则。
2) 尾数运算, 将对阶后的两尾数按定点运算规则运算
3) 规格化, 为增加有效数字的位数, 提高运算精度, 必须将计算结果的尾数规格化, 尾数定点运算的溢出不算溢出, 右规即可。特别地, 补码形式的 不算规格化数, -1的补码为规格化数。
4) 舍入, 为提高精度, 考虑尾数右移丢失的数值位 (类比十进制的四舍五入)
5) 溢出判断, 即判断结果是否溢出
四、算术逻辑单元
4.1 ALU电路
如下图中Ki的不同取值决定ALU做不同的算术运算或逻辑运算。
ALU框图:
4.2 快速进位链
并行加法器图:
串行进位链图:
并行进位链: 将n位全加器分成若干小组, 小组内的进位同时产生, 小组之间采用串行进位。
并行进位表达式:
四位一组并行进位链:
单重分组跳跃进位图:
双重分组跳跃进位: 将n为全加器分成若干大组, 每个大组又包含若干小组, 大组内所包含的各个小组的最高位进位同时产生, 大组与大组间采用串行进位。
双重并行进位链图:
以第8小组为例:
第二大组的各个小组最高进位同时产生的表达式原理:
大组内各小组最高位进位线路 (以第二组为例):
五、二进制校验
5.1 原理
编码的检测能力与纠错能力与编码的最小距离有关。
编码的最小距离: 任意两组合法代码之间二进制位数的最小差异。
示例图:
公式:
5.2 奇偶检验
在奇偶校验中,每个数据字节都会增加一个额外的位,称为校验位。校验位被设置为使得每个字节中“1”的位数(为奇数(或偶数)。
分组的奇偶检验示例图:
由第图中第三部分可知, 若数据出错, 分组的奇偶校验可知是前半段亦或后半段出错。
5.3 汉明码
汉明码的检测位置位于2的整数次方的位置, 如1, 2, 4 ,8。需要添加的检测位为:
汉明编码原理图:
示例图:
汉明码的纠错过程:
示例图: