文章目录
布尔代数和基本逻辑电路
真值表:0 1 运算的核心基础
无符号数加法器
全加器:
即考虑低位的进位标志符,又考虑当前运算向不向高位进位
n位加法器:充分解释了一位加法器的设计缘由,低高进位的设计很合理
零标志ZF = 1,补码特意留下的一种特殊编码
整数加减运算器
整数加减部件核心
从c表达式到逻辑电路
整数的乘运算
两个运算数应该是同一个类型,如果不是会先转化为同一个类型,(常常会自动执行类型提升操作)
整数乘法可以写表达式判断是否溢出,简单的将乘出来的数再除以一个因子看等不等于另一个因子
整数的溢出可以在机器数级别上对高位符号判断
整数乘指令的溢出判定可以通过对高位结果进行分析,n*n 位会得到2n位
整数乘法漏洞精讲例题
变量乘法用移位操作更方便
整数除法运算
整数除只有一种情况会发生溢出
一般整数除法会向0舍入
整数除0的结果无法表示
除法指令可能被优化成取反指令
除法运算时间周期长比乘法周期长,可以整除就用移位
整数除法舍入的原理:
一个牛逼的除法运算函数
浮点加减运算
浮点数运算:规格化格式
阶码可能溢出
尾数溢出,结果可以不溢出
对几种异常情况的定义
浮点数的一些异常可以被处理,程序可以继续运行
异常经典案例
浮点数的对阶过程导致小数很多有效位被舍去
尾数移位和阶码加减同步保持数据表示的正确性
浮点运算的精度
float 单精度,有效位数只有24位,所以从int 到float可能会有数据舍入,但是double就不会
浮点数运算比较经典案例
浮点数不满足加法结合律
浮点数运算精度举例(爱国者导弹)