C ++ не может определить переполнение (Windows) - PullRequest
0 голосов
/ 25 марта 2020

Это простая проблема:

int main()
{

    long int a = 100000;
    long int b = 100000;
    long int c = a*b;
    std::cout << c << std::endl;
}

Выход для этого (в MSV C) равен 1410065408, где можно ожидать 1, а затем 10 из 0. Я использую длинные целые, контейнер которых достаточно велик для такого размера, если я не ошибаюсь. Почему это происходит?

1 Ответ

1 голос
/ 25 марта 2020

Чтобы узнать пределы целочисленных типов на вашей платформе, вы можете использовать numeric_limits. Результаты не одинаковы на разных платформах. В вашем случае long, вероятно, является 32-разрядным целым числом.

#include <limits>
#include <iostream>

int main() 
{
    std::cout << std::numeric_limits<int>::max() << '\t'
              << std::numeric_limits<long>::max() << '\t'
              << std::numeric_limits<long long>::max() << '\n';
}
...