我需要在C中使用按位運算創建一個方法,檢查x + y是否會溢出。我最多隻能使用以下操作中的20個; ! 〜&^| + < < >>請記住,我必須測試負數和正數。創建方法,檢查x + y是否會使用按位運算溢出
我試了幾次才使它工作。我的邏輯聲音是?我要: 如果(x + y)小於x,則溢出。基於這個邏輯,我寫了這個;
int addOK(int x, int y)
{
int sum = x + y;
int nx = ((~x) + 1);
int check = (sum + nx)>>31;
return !check;
}
謝謝!
不幸的是,有符號整數溢出導致未定義的行爲。因此,在你的函數中,你無法控制'sum'中存儲的內容,所以你的支票並沒有很好的定義。 – 2012-04-14 16:15:38
@guambler ...如果添加「-128」和「127」會發生什麼?當然是'8位',我猜你的邏輯會失敗。任何方式來解決這個問題? – noufal 2013-05-29 10:20:51