2013-04-24 15 views
9

多くの場合、値は正であることが知られています。たとえば、TCP/UDPシーケンス番号は常に正の値です。 intunsigned intはいずれも最大のsequence numberを格納するのに十分なほど大きいため、これらのタイプのいずれかを使用できます。値が正であることが分かっている場合、他にも多くの例があります。符号なしの値を処理していることがわかるたびに「符号なし」を使用する必要がありますか?

普通のsignedタイプの容量で十分な場合(多くの場合はそれ以上の場合)、unsignedタイプを使用する理由はありますか?

ので、個人的に、私は定期的なタイプを使用する傾向がある:私はUINTのために余分なヘッダを含める必要はありません

  • intはおそらくもう少し読みuintまたはunsigned int
  • より
  • など私はプログラムのどこかで余分なキャストを避けるでしょう

使用する理由unsignedタイプ私は想像することができます:

  • ヘルプコンパイラはより良いコードを生成しましたか?
  • その変数を理解するために別のプログラマはバグの可能性(int型はUINTコンパイラに割り当てられている場合、たとえばおそらくコンパイル時にエラーが発生しますし、我々は我々が割り当て、その値が負でない確認する必要があります)
を避ける
  • 符号なしであるヘルプ
    +0

    ここにいくつかの考えがあります:http://embeddedgurus.com/stack-overflow/2009/08/a-tutorial-on- signed-and-unsigned-integers/ – Morwenn

    +1

    ありがとう、また私はその質問をちょうど今見つけたhttp://stackoverflow.com/questions/12225521/should-unsigned-ints-be-used-if-not-necessary?rq= 1 – javapowered

    +1

    いいえ、 'unsigned'を使うことにはいくつかの議論があります - StroustrupはこれをC++プログラミング言語のどこかに渡すことを暗示しています - Lakosは彼の本の1つで退屈な章を書きました。問題の例:値がaとbの場合、 'abs(a - b)'はintでは直感的に動作する傾向がありますが、unsignedでは動作しません。標準の変換が静かに実行できることは注目に値するので、符号なしを使用して取得することを望むかもしれないチェックの種類は、とにかく動作しません。負の値は黙って大きくなり、その逆もあります。 –

    答えて

    1

    理由の1つは、符号付きの数値と符号なしの数値を比較すると驚くべき結果が得られることです。 Cと(私は)C++では、符号付きと符号なしの数値を比較すると、符号付きの数値は符号なしとして解釈されます。符号付きの値が負の場合は、符号なしとして読み取ると、符号なしの数値よりも大きな値が与えられます。 Cと同じ変換規則を使用するObjective-Cの例については、this questionを参照してください。

    関連する問題