运算方法与运算器
定点数运算及溢出检测
定点数加法运算
定点数减法运算
溢出
溢出:运算结果超出了某种数据类型的表示范围
溢出只可能发生在同符号数相加时
方法1:对操作数和运算结果的符号位进行检测,当结果的符号位与操作数的符号不相同时就表明发生了溢出
方法2:对最高数据位进位和符号进位进行检测
方法3:用变型补码
int tadd_ok(int x,int y) {
int sum=x+y;
int neg_over=x<0&&y<0&&sum>=0;
int pos_over=x>=0&&y>=0&&sum<0;
return !neg_over&&!pos_over;
}
- 无符号数加法的溢出可用ALU的进位表示
- 无符号数减法的溢出也可用带加/减功能的ALU的进位取反后表示
原码一位乘法
移位操作
- 逻辑左移
数据整体左移一位,最低位补0
- 算术左移
操作与逻辑左移一样,但是意义是等于数据乘2
- 逻辑右移
数据整体右移一位,最高位补0,最低位被移出
- 算术右移
数据整体右移一位,最高位被复制填补 ,最低位被移出
相当于除2