Переполнение произведением целых - PullRequest
2 голосов
/ 22 сентября 2010

В приведенном ниже коде значение prod не равно 9 000 000;он получает значение мусора.Почему нам нужны num1 и num2, чтобы иметь тип long?

#include <stdio.h>
int main()
{
    int num1 = 3000, num2 = 3000;
    long int prod = num1 * num2;
    printf("%ld\n", prod);
    return 0;
}

1 Ответ

9 голосов
/ 22 сентября 2010

Когда вычисляется num1 * num2, он сохраняется в промежуточной переменной того же типа (то есть int), которая выглядит как мусор, потому что она недостаточно велика. Затем промежуточная переменная сохраняется в длинном int, но вычисленный ответ уже превратился в мусор.

Решение - привести один из аргументов умножения.

long int prod = (long int)num1 * num2;

Таким образом, промежуточные вычисления будут использовать больший из двух типов и временно хранить его как long int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...