2016-08-31 5 views
2

absのマニュアルには、最も大きな負の整数の絶対値を取ろうとすることが定義されていません。負の数値の絶対値が最も大きくなる

とABSのプロトタイプは次のとおりです。int abs(int j);

はなぜ腹筋はintを返すのですか?戻り値が正の値になるので、unsigned intを返してみませんか?

ABSはunsigned intを返された場合は、最大の負の整数の絶対値のソリューションは、このような単純です:

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

Cが 'unsigned'型をまったく持っていないうちに、' abs() 'の指定が確定した可能性があります。 –

+0

私はそれが正しい答えだと思う。ありがとう@Jonathan Leffler –

答えて

4

あり、様々な問題が計算で符号付きと符号なしの値を混合しているので、問題は次のようになり:abs(int)を呼び出した結果、ほとんどのユーザーは何をしますか?私は最も可能性が高い答え - または少なくとも共通のもの - は、彼らが結果とのさらなる算術演算を行うということだと思います。その場合は、unsignedに戻るのではなく、ほとんど確実にintの範囲内にとどまりたいと思っています。

ここでの計算で、符号なしで署名された混合に別のポストだ:what happens when i mix signed and unsigned types ?

-2

16ビット符号付き整数そこでINT_MIN-32768なり-32768

+32767の範囲を有します。その絶対値は整数の範囲外です。したがって定義されていません。

関連する問題