各种进制的常见书写方式:
eg:75.3
整数部分 = 75:
小数部分 = 0.3:
十进制:260.75 -> 1 ¦ 0 0 0 0 ¦ 0 1 0 0 . 1 1
整数部分:260 = 256 + 4 = 2 8 + 2 2
小数部分:0.75 = 0.5 + 0.25 = 2 -1 + 2 -2
十进制:533.125 -> 1 0 ¦ 0 0 0 1 ¦ 0 1 0 1 . 0 0 1
整数部分:533 = 512 + 16 + 4 + 1 = 2 9 + 2 4 + 2 2 + 2 0
小数部分:0.125 = 2 -3
(考纲已删)
如 985 的 8421 码为:1001 1000 0101
其他BCD码
计算机硬件能支持的无符号位数是有上限的,是由机器字长限制的:
无符号整数的表示:
✨ 加法:
✨ 减法:
减数B进行变形:
减法变加法:
原码缺点:
例1:
例2:
对比无符号整数的减法运算
例3:
练习:
补码不同于原码、反码,补码的0只有一种表示形式,所以多出来的那位我们人为使它用以表示-1。
例1:
整数补码的加法运算:
小数补码的加法运算:
例2:
整数补码的加法运算:
小数补码的加法运算:
例3:
整数补码的减法运算:
小数补码的加法运算:
(大纲已删)
奇偶校验码
例:
重点体会 异或运算
(电路基本原理&加法器设计)
同或:
运算速度很大程度上取决于进位速度
为了方便观看,记 Gi、Pi :
一般以4个FA作为1个加法器
本小节不是重点,慢慢理解
有符号数:
无符号数同:
底层硬件计算逻辑相同,但是 有符号数 和 无符号数 判断溢出的方式不同
(判断溢出的方式)
对于10进制:
对于2进制:
⚪ 原码
算数右移:
算数左移:
⚪ 反码
⚪ 补码
计算机的乘法是基于 算数移位 和 加法 进行的
对于 大端存储(先存高字节再存低字节)和 小端存储(先存低字节再存高字节) 之间进行转换
回忆运算器的基本组成:
原码一位乘法:
最低位
下一位的运算同上:
再下一位:
再下一位:
最后的符号位不用参与运算,移位进行了 4 次 (即 n 次)
最后修改符号位:
原码运算时用双符号位或单符号位都可以。但是为了避免和补码运算记混,建议用双符号位。
辅助位是把MQ扩展了一位来存储
MQ中的最低位指参与乘法运算的最低位(就是不算上 辅助位)
CPU中所有的寄存器长度一般都是统一的,MQ多增加了一位,因此ACC、X也多加一位(多出来的一位可以用来表示 双符号位 的补码)
被乘数采用双符号位的补码,而乘数采用但符号位的补码
回忆运算器基本组成:
默认先上商1:
上商1后计算结果11110送到ACC更新:
ACC检测到符号位为1,即负数,说明应上商0,需要恢复:
ACC、MQ逻辑左移:
确定商的下一位,同上,先上商1:
下一位:
下一位:
下一位:
计算符号位:为0
最终结果:
能否不恢复余数?----> 加减交替法(对恢复余数法的一种优化)
定点小数除法规定 被除数 < 除数,否则结果会大于1,定点小数无法表示大于1的范围。
硬件通过第一步的商来检测:正常情况第一步上商1得到的余数一定要是一个负值(若为正说明被除数 > 除数)
与原码的加减交替法类似
H:16进制 ; D:10进制 ; B:2进制
字地址 转 字节地址 :字地址逻辑左移两位(即×4,因为上图中 1字 = 4B)
半字地址 转 字节地址 :半字地址逻辑左移一位
例:
b的尾数丢失一位,会影响精度,如何优化:
仍以上面的 b 为例:
浮点数尾数的规格化:
负上溢、正上溢已从考试大纲删除
念作 “I triple E”
移码偏置值取 2n-1 - 1:
其中:
真值 -128 = - 1000 0000 B
移码 = - 1000 0000 + 0111 1111 偏置值比 -128的绝对值 更小
移码位数只有 8 bit,所有的 ± 运算默认会再进行 mod 28 (即在原有的基础上加上 1 ¦ 0000 ¦ 0000)
故该处:
规格化的原码尾数,最高数值位一定是1,因此干脆将其隐藏起来,可以多利用一位。做题时 记得在小数点前加上1,即 1.M才是尾数真正的值
IEEE754中将 阶码全1、全0用作特殊用途,故真值范围为 -126 ~ 127 (原本应为 -128 ~ 127,其中-128为全1、-127为全0,故减去两个数)
上图中 float 偏置值: 2 8 - 1 - 1 = 128 - 1 = 127
double 偏置值: 2 11 - 1 - 1 = 2 10 - 1 - 1 = 1023 即 011¦1111¦1111
计算阶码真值时,可以将移码和偏移量 看作无符号数进行计算
例:
例:
例:
考试大多考察32位机器