Этот код кода пытается найти абсолютное значение отрицательного числа, но выход также отрицательный. Может ли кто-нибудь сказать мне, как преодолеть это?Проблема с абсолютным значением 64-битного целого
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <inttypes.h>
int main() {
int64_t a = 0x8000000000000000;
a = llabs(a);
printf("%" PRId64 "\n", a);
return 0;
}
Выход
-9223372036854775808
UPDATE:
Спасибо за все ваши ответы. Я понимаю, что это нестандартное значение, и поэтому я не могу выполнить абсолютную операцию над ним. Тем не менее, я столкнулся с этим в реальной кодовой базе, которая представляет собой моделирование генетического программирования. «Организмы» в этом не знают о стандарте C и настаивают на генерировании этой ценности :) Может ли кто-нибудь сказать мне эффективный способ обойти это? Еще раз спасибо.
спасибо. Я думаю, что я проверю недопустимое значение как частный случай перед вызовом llabs. –