c语言除法结果溢出怎么办,关于C ++:导致除法溢出错误(x86)

我有一些关于x86或x86_64体系结构上的划分溢出错误的问题。最近,我一直在阅读有关整数溢出的知识。通常,当算术运算导致整数溢出时,将置位FLAGS寄存器中的进位或溢出位。但是很显然,根据本文所述,除法运算导致的溢出不会设置溢出位,而是会触发硬件异常,类似于将其除以零时的情况。

现在,除法导致的整数溢出比乘法要少得多。只有几种方法可以触发除法溢出。一种方法是做类似的事情:

int16_t a = -32768;

int16_t b = -1;

int16_t c = a / b;

在这种情况下,由于带符号整数的二进制补码表示形式,因此无法在带符号的16位整数中表示正32768,因此除法运算会溢出,从而导致-32768的错误值。

几个问题:

1)与本文所说的相反,以上内容并未引起硬件异常。我正在使用运行Linux的x86_64机器,当我除以零时,程序以Floating point exception终止。但是,当我导致除法溢出时,程序照常继续运行,而忽略了错误的商。那为什么不引起硬件异常呢?

2)为什么除硬件运算如此严重地处理除法错误,而不是其他算术溢出?为什么硬件应该默默地忽略乘法溢出(很有可能偶然发生),但是应该认为除法溢出会触发致命中断?

===========编辑==============

好的,谢谢大家的回答。我得到的答复基本上是说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值