Я стараюсь код ниже:Переполнение при 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 с = A * B * 4 будет переполнение?
Я думаю, что a * b * 4 сначала сохранит значение UINT, а затем назначит параметру c? Это правильно?
Я хочу найти google для некоторого намека, но я не знаю, какое ключевое слово я должен использовать.
Благодаря
[Арифметические операторы] (http://en.cppreference.com/w/cpp/language/operator_arithmetic) – Danh
Ваше предположение верно. Вся операция не является атомарной. –
Это поможет, если вы используете стандартные типы. Что такое UINT? – juanchopanza