-1

我想知道通过检查 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 位溢出时,是否有任何陷阱?

4

1 回答 1

0

为自己简化它。什么是 32 位int和 64 位int?我们知道 anint是一个int,它可以包含相同的东西并遵循相同的规则,但一个有更多的位。

考虑 achar与 a short(在 32 位系统上)。

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

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

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

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

于 2012-11-06T13:24:03.763 回答