运算方法与运算器

定点数运算及溢出检测

定点数加法运算

批注 2020-01-11 152715

定点数减法运算

批注 2020-01-11 152742

溢出

溢出:运算结果超出了某种数据类型的表示范围

溢出只可能发生在同符号数相加时

方法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

乘法

批注 2020-01-12 100000

补码一位乘法

批注 2020-01-13 132902

乘法器

批注 2020-01-13 133840

定点数除法

results matching " "

No results matching " "

results matching " "

No results matching " "