2012-11-06 101 views
-1

我想知道是否有任何差異檢查算術溢出爲32位和64位? (除了限制..)32位和64位C算術溢出差異?

例如,對於32位乘法a * b

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

我可以使用64位的乘法相同的邏輯? 像:

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

是否有任何陷阱,當我要檢查64位溢出帶符號/無符號?

+1

你爲什麼不試試呢? –

+1

不,原理完全一樣。只有常數不同。 –

回答

0

爲自己簡化它。什麼是32位的int與64位的int?我們知道一個int是一個int,它可以包含相同的東西,並遵循相同的規則,但一個有更多的位。

想一想charshort(在32位系統上)。

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

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

如果我加1到其中任何一個,它們會溢出,一個是其他兩倍的大小。我需要做一些特殊的事情來檢查一種情況下的溢出嗎?號碼

你的例子不同,因爲它的兩個int當然,但推理是一樣的。