如何檢測 C++ 中的整型溢位?


檢測溢位的唯一安全方法是在溢位發生前進行檢查。不過,有一些迂迴的方式可以用來檢查整型溢位。因此,如果你想檢測無符號 int 加法中的溢位,可以檢查結果是否實際小於新增的任何一個值。例如,

unsigned int x, y;
unsigned int value = x + y;
bool overflow = value < x; // Alternatively "value < y" should also work

這是因為如果 x 和 y 在加法時都是無符號 int 並且發生溢位,它們的數值就不可能大於這兩個數中的任何一個,因為它需要大於最大可能無符號 int 才能迴繞並跑到這些值的前面。

另一種方法是嘗試訪問 CPU 中的溢位標誌。有些編譯器會提供對它的訪問,你可以在測試後進行檢查,但這並不是標準的做法。

還有其他一些方法可以實現這一目的,但它們只能提供估計值。你可以在這裡檢視它們 − https://stackoverflow.com/a/199455/3719089


更新時間: 2020 年 6 月 24 日

1K+ 瀏覽

開啟你的職業生涯

完成課程以獲得認證

開始吧
廣告
© . All rights reserved.