Я читал, что преобразование от int
к long long int
является продвижением по службе и, следовательно, считается, что не должно быть никаких проблем, поскольку нет потери данных, в отличие от преобразования наоборот.Почему неявное преобразование int в long long int дает неожиданный ответ на C++?
Но когда я умножаю два int
s большой ценности и храните его в long long int
, он показывает мне отрицательное число.
Например:
int a=1000000, b=1000000;
long long int c=a*b;
cout<<c;
Приведенный выше код дает мне отрицательное значение. Может кто-нибудь объяснить, почему?
Это потому, что вы используете ints для выполнения операции, которая приводит к возвращаемому значению, которое также является int, которое может переполняться, а затем у вас есть продвижение, которое уже слишком поздно. –
Я пробовал то же самое с C, где я использовал «% lld» placeholder в printf для печати. Даже тогда это показывает мне отрицательную ценность. – Bharg
возможно дубликат http://stackoverflow.com/questions/31662792/multiplication-of-two-integers-in-c – Ap31