2008-10-15 35 views
1

在我當前的32位應用程序中,我通過對64位整數執行操作來檢查(偶爾會)溢出。超過64位時未定義的行爲

但是,在64位系統上似乎沒有標準的128位整數。是否有一種檢查溢出的簡單方法,或者是獲取128位整數的方法,該方法適用於所有操作系統和編譯器?

我嘗試使用GMP作爲更通用的解決方案,但它對我的要求有點重量級。

效率不是太重要,沒有處理器特定的ASM。

回答

3

大部分在這一問題的討論適用:

How to detect integer overflow?

許多用於32位溢出chacking適用於64比特,以及(不是所有的技術的技術中討論使用的下一個較大的整數類型來處理溢出)。

2

this document詳細討論捕捉溢出(c)。我不知道在C++中是否有更好的方法。

+0

在C++中,我會使用模板而不是該文檔中的宏。消除對typeof()的需求。 – Justsalt 2008-10-15 15:38:26

1

一種解決方案是圍繞64位int創建一個類,它在執行操作之前覆蓋算術運算符進行檢查。

我不記得operatorX語法把我的頭頂部(我從C很久以前切換++與Java),但樣品是:

int64 myint64::add (int64 a, int64 b) { 
    if (MAX_INT64 - a > b) { 
     // error condition here. 
    } 
    return a + b; 
} 
int64 myint64::mul (int64 a, int64 b) { 
    if (MAX_INT64/a > b) { 
     // error condition here. 
    } 
    return a * b; 
} 

用於任何其它運算類似,儘管對於諸如權力,階乘等非基本功能,這可能會變得非常複雜。

但是,如果你從基本的算術積木構建,他們會工作。