Я писал небольшой алгоритм с наименьшим общим множественным числом и столкнулся с чем-то, чего не понимаю. Это первая и последняя часть кода:Неверный порядок операций? (C++)
long a = 14159572;
long b = 63967072;
int rest = 4;
long long ans;
.
. // Some other code here that is not very interesting.
.
else
{
//This appears correct, prints out correct answer.
ans = b/rest;
std::cout << a*ans;
}
Но если я изменю последний «еще» на это дает ответ, что гораздо меньше, и неправильно:
else
{
std::cout << a*(b/rest);
}
Кто-нибудь знает, почему это? Я не думаю, что это переполнение, потому что это не отрицательное число, которое получилось неправильным, а скорее намного меньшим целым числом (около 6 * 10^8), чем фактический ответ (около 2.2 * 10^14). Насколько я понимаю, он должен сначала рассчитать «b/rest» в обоих случаях, поэтому ответы не должны отличаться?
Вы пропустили, чтобы предоставить реальный код, который вы написали – Dutow
Я считаю, что компилятор читает слева направо. Таким образом, он может распространять «а» через паренс и давать немного другой ответ. – Winter
Тип 'a * ans'' long long ', но тип 'a * (b/rest)' просто 'long'. – user975989