short не переполняет visual c 2017

#c #visual-c #integer-overflow #short

#c #visual-c #целое число-переполнение #short

Вопрос:

Ввод 32760 и 9 выводит 32769, а не -32767.

Я не знаю, что еще делать, это простая программа, но она работает не так, как я хочу.

 #include <iostream>
using namespace std;

int main()
{
    short a, b;
    cin >> a;
    cin >> b;
    cout << a b;
}
 

Комментарии:

1. Проверьте максимальное значение, которое short может быть сохранено, с std::numeric_limits<short>::max() помощью . Он может быть больше 16 бит, чтобы арифметика не могла переполниться. Обратите внимание, также, что если он переполняется, результат не определен; его не требуется переносить.

Ответ №1:

Результат арифметической операции a b не имеет типа short . Вместо этого правила целочисленного продвижения гласят, что операнды сначала повышаются до большего целочисленного типа перед добавлением.

Чтобы заставить его «работать» так, как вы хотите, тогда что-то вроде этого вызовет переполнение целых чисел (которое вы, кажется, хотите увидеть):

 short x = a   b;
cout << x;
 

Комментарии:

1. Кроме того, short может быть достаточно большим, чтобы содержать результат этого добавления. short ширина должна быть не менее 16 бит, но может быть и больше. 1.