2012-09-02 66 views
11

對於int a, b,我知道當ab中只有一個是負數時,a/ba % b的結果是機器相關的。但是當b不爲零時,我總是有(a/b * b) + a % b == a嗎?當b不是零時,我總是有`(a/b * b)+ a%b == a`嗎?

+0

什麼意思是「總有」,什麼類型是a和b –

+0

事實上,如果類型是無符號類型,當「b」非零時相等總是成立。 –

回答

18

C++ 11§5.6[expr.mul/4規定了:

如果商a/b是結果的類型表示的,(a/b)*b + a%b等於a

C11§6.5.5/ 6指定具有稍微不同的措辭是相同的:

如果商a/b可表示,表達(a/b)*b + a%b應等於a;否則,a/ba%b的行爲未定義。

+2

請注意,「如果商是可表示的」子句是必不可少的。例如,如果'a == INT_MIN'和'b == - 1',等於false(並且行爲是未定義的)。 –

+0

@R .. - 對於二進制補碼錶示而言,這是正確的,但對符號幅度不適用。不確定補碼。這三個都是C和C++的有效整數表示。 –

+0

對不起,我的意思是一般都是錯誤的,因爲二進制補碼是一種可能性。這在實踐中也是錯誤的,因爲補充和簽署/量級實現不存在。 –

相關問題