В C++, если я делаю это:C++ Почему LLONG_MIN == -LLONG_MIN
__int64 var = LLONG_MIN;
__int64 var2 = -var;
cout << "var: "<< var << endl;
cout << "var2: "<< var2 << endl;
Выход я получаю:
var: -9223372036854775808
var2: -9223372036854775808
Что является частью стандарта, который покрывает это? Я предполагаю, что это целочисленное переполнение. Это было скомпилировано с использованием g ++ (GCC) 4.7.2.
У меня есть функция вычитания, и я пишу функцию добавления, и я думал, что могу просто сделать это: add(someobj &obj, long long num) { subtract(obj, -num); }
. Я думаю, что это сработало бы, если бы не LLONG_MIN.
Это действительно целочисленное переполнение, и артефакт (https://en.wikipedia.org/wiki/Два% 27s_complement) – syam
Я думаю, что часть стандарта, которая управляет этим, наследуется от стандарта C – sehe
@sehe IIRC, которое представляет собой целочисленное переполнение UB. – syam