2016-08-31 7 views
2

В руководстве пользователя abs's есть ПРИМЕЧАНИЯ: попытка определения абсолютного значения самого отрицательного целого не определена.получить абсолютное значение отрицательного числа

И прототип абс является: int abs(int j);

Почему обратный абс int? Поскольку возвращаемое значение будет положительным, почему бы не вернуть unsigned int?

Если абс вернулся unsigned int, решение абсолютной стоимости наиболее отрицательное целое число является простым, как это:

if(INT_MIN == j) 
    return (unsigned int)j; 
+3

Вероятность того, что спецификация 'abs()' была доработана до того, как у C были 'unsigned' типы вообще. –

+0

Я думаю, что это правильный ответ, спасибо большое @ Джонатан Леффлер –

ответ

4

Есть целый ряд вопросов, в смешении подписанных и неподписанных значения в вычислениях, поэтому вопрос будет : Что большинство пользователей собирается делать с результатом вызова abs(int)? Я думаю, что наиболее вероятный ответ - или, по крайней мере, очень общий - заключается в том, что они сделают дальнейшую арифметику с результатом. В этом случае вы почти наверняка захотите остаться в пределах int, а не возвращаться unsigned.

Вот еще один пост на смешивание подписали с беззнаковым в расчетах: what happens when i mix signed and unsigned types ?

-2

16-битное знаковое целое имеет диапазон -32768 в +32767

Так INT_MIN будет -32768. Абсолютное значение этого параметра выходит за пределы целого числа. Поэтому он не определен.

Смежные вопросы