當我讀caspp時,有一個問題,確定是否可以添加參數沒有overflow.so我寫的後續代碼。「long long = int + int」先計算,然後鍵入轉換?
//sum1 is long long ,so there is no overflow.
//when sum2 is overflow ,then sum1 != sum2;
int tadd_ok (int x,int y)
{
long long int sum1 = x + y;
int sum2 = x + y;
return sum1 == sum2;
}
然而,還有一些問題。 當我假設x = -2147483647,y = -2時,sum1和sum2都等於2147483747(都溢出!)。
我想,對於「long long = int + int」,首先計算,然後鍵入轉換? 那麼這些規則是什麼?
計算表達式,首先,再後來分配。只要所有操作數都是「int」,表達式就會計算爲「int」。在發佈的代碼中,int sum2 = x + y;'相當於'int sum2 =(int)sum1;'。 – dxiv
C和C++標準文檔在典型的升級和轉換中非常明確。你的問題是你的中間和將是一個合適的大小,很可能,但是這種轉換不會被保留,因爲你正在添加兩個'int'類型。你需要施加加法,而不是假設結果會很長。 –
'C'和'C++'作爲單獨的語言。 – sjsam