【问题标题】:C arithmetic overflow difference between 32bit and 64bit?32位和64位之间的C算术溢出区别?
【发布时间】:2012-11-06 12:43:29
【问题描述】:

我想知道检查 32 位和 64 位的算术溢出是否有区别? (除了限制..)

例如对于 32 位乘法 a * b:

if(b > 0 && a > UINT32_MAX_VALUE / b) {
//Overflow
} 

我可以对 64 位乘法使用相同的逻辑吗? 喜欢:

if(b > 0 && a > UINT64_MAX_VALUE / b) {
//Overflow
} 

当我必须检查有符号/无符号的 64 位溢出时是否有任何陷阱?

【问题讨论】:

  • 不,原理完全一样。只有常数不同。

标签: c math 64-bit overflow 32-bit


【解决方案1】:

自己简化它。什么是 32 位 int 与 64 位 int?我们知道intint,它可以包含相同的内容并遵循相同的规则,但一个具有更多位。

考虑 charshort(在 32 位系统上)。

unsigned char cmax  = 0xFF;   // 1111 1111(2) = 255(10)

unsigned short imax = 0xFFFF; // 1111 1111 1111 1111(2) = 65535(10)

如果我在其中任何一个上加 1,它们都会溢出,一个是另一个大小的两倍。在一种情况下与另一种情况下,我是否需要做任何特别的事情来检查溢出?没有。

你的例子不同,因为它当然是两个ints,但推理是一样的。

【讨论】:

    猜你喜欢
    • 2014-08-09
    • 2017-07-29
    • 2011-12-12
    • 1970-01-01
    • 2011-09-13
    • 2012-02-15
    • 2013-04-02
    • 2019-04-15
    • 2017-07-01
    相关资源
    最近更新 更多