我試試下面的代碼:溢出時UINT64 = UINT8 * UINT8
UINT a = 32768;
UINT b = 32768;
UINT64 c = a * b * 4; // c = 0, overflow...;
UINT64 d = (UINT64)a * (UINT64)b * 4; // d = 4294967296, the right answer;
爲什麼UINT64 C = A * B * 4會溢出?
我覺得A * B * 4首先會保持在一個溫度UINT值,然後將分配給參數c?這樣對嗎?
我想搜索谷歌的一些提示,但我不知道我應該使用什麼關鍵詞。
由於
[算術運算符(http://en.cppreference.com/w/cpp/language/operator_arithmetic) – Danh
你的假設是正確的。整個行動不是原子的。 –
如果您使用標準類型,這將有所幫助。什麼是UINT? – juanchopanza