Исходный код:
#include <climits>
#include <iostream>
int add(int a, int b)
{
return a + b;
}
int main()
{
std::cout << add(INT_MAX, 1) << std::endl;
return 0;
}
Вывод:
-2147483648
Почему так получилось? искал не нашел ответа.
У Вас произошло переполнение значения int при добавлении 1 к максимальному значению.
Можете попробовать перевести INT_MAX в двоичное представление руками, получите набор единиц и ноль в начале, который отвечает за знак плюс. Добавляете 1 в двоичном виде, и получаете в знаковом разряде 1 вместо 0 и все остальные нули. Если посмотрите на способ педставления в машине отрицательных чисел, то увидите, что этим представляется INT_MIN - 1 и все осталные нули. Посмотрите, например, в Windows калькуляторе.
Если, к примеру, тип int занимает 4 байта и используется система представления целых чисел дополнением до 2, то INT_MAX
можно представить в шестнадцатиричном виде следующим образом
7FFFFFFF
то есть все биты кроме знакового бита установлены в единицу.
Если к этому числу прибавить 1, то получится
80000000
то есть число с установленным знаковым битом. Это представление наименьшего отрицательного значения для типа int
которое равно INT_MIN
.
Это значение и было выведено на консоль в десятичном виде.
В общем случае такое присвоение для знаковых целых чисел, когда имеет место переполнение, является неопределенным поведением.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Вот уж не знаю то ли вопрос такой глупый, то ли я действительно такой большой оригинал, но найти какую-то информацию по своему вопросу я не смогА...
Можно ли в конструкторе класса проверить некое условие и сразу запустить деструктор, если условие не удовлетворяется? Или же придется бросать...
Нужно разделить очередь на две, в одну значения большие или равные среднему,во вторую меньшие,при этом не создавая новую(задание такое)Как...