Jan 24, 2013 16:43
Вы тоже раньше думали, что функция abs() возвращает всегда неотрицательные значения?
=============
#include
#include
main()
{
int a = (int)0x80000000;
int b1 = abs(a);
int b2 = abs(a+1);
printf("%d %d\n", b1, b2);
}
=============
$ gcc 1.c
$ ./a.exe
-2147483648 2147483647
=============
Leave a comment
Comments 11
Reply
Reply
Reply
Reply
abs(NaN) = NaN.
Только это сломало бы другие хаки, где переполнение используют осознанно.
Reply
Проверил ради интереса в C#, выдает исключение System.OverflowException: "Инвертировать минимальное значение двоичного дополнения невозможно"
Reply
Leave a comment