У меня есть этот код. Когда я добавляю два отрицательных целых числа, ответ положительный, а не отрицательный. Как это исправить? Я думаю, что 0x80000000 наименьшее возможное значение для целогоДобавление и вычитание гексадецималов
#include <iostream>
#include <string>
using namespace std;
int main(void)
{
unsigned int maxInt = 0x7FFFFFFF;
int num1 = 7;
signed int minInt = 0x80000000;
int num2 = -21;
float num3 = 1;
float i;
cout<<"The value of the first variable is: "<<maxInt<<endl;
cout<<"The value of the second variable is: "<< num1<<endl;
cout<<"Addition of the two numbers: "<< maxInt + num1 <<endl;
cout<<endl;
cout<<"The value of the first variable is: "<<minInt<<endl;
cout<<"The value of the second variable is "<<num2<<endl;
cout<<"Addition of the two numbers: "<< minInt + num2 <<endl;
cout<<endl;
system("pause");
return 0;
}
Какого выход? Чего вы ожидали? –
Вы не исправляете это, добавив отрицательное число в 'minInt', чтобы получить результат вне диапазона, добавление переполнения, это неопределенное поведение. –
Любое вычитание из 'minInt' вызовет недоиспользование, которое будет представлено как положительное число. Вы не можете исправить это с помощью 'int', поскольку бит не хватает. Вам понадобится тип данных (например, longlong), который имеет больше бит. –