1. 程式人生 > >求絕對值,慎用C標準庫abs函式

求絕對值,慎用C標準庫abs函式

C庫函式abs,宣告如下:
int abs(int n);

在32位程式中,
int的範圍是: -2147483648~2147483647
其中 -2147483648 的絕對值2147483648超過了int的表示範圍.

那麼: abs(-2147483648) == ?

大家不妨自己測試下.

如果宣告為:
unsigned int abs(int n);
那麼這個函式和其他int進行運算,則可能會將其自動轉換成unsigned int,
真是兩難的處境.

char, short, long 與此類似, 我們需要自己保證引數不是這個特殊值.
建議在處理的時候始終將結果轉換成unsigned, 來避免這個問題.
例如 unsigned int y = (unsigned int)abs(x);