#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.