Humanity

Edit the world by your favorite way

signed, unsigned

文字やバイト列(バイナリ)を扱う時には必ずchar。
扱う数値の範囲が1byte以下でそれ以上の容量は必要ない時はunsinged char。


  • charは処理系によってsignedかunsingedか違う
  • char, singed char, unsinged char はそれぞれ違う型として定義されている。(char != singed char)
  • charのみに限らない話:
    • 違う型で数値比較すると返る値は処理系定義
    • 違う型を比較するのをコンパイラ(gcc)に警告してほしい時は-Wsign-compare をつける。
      これは-Wallには含まれない。
    • C言語は比較的、型にゆるい(警告のみ)。C++ではエラーとなる。
    • 代入式の型は,左辺側の型となる。[C99, 6.5.16, 3]
    • 右辺側の値は,代入式の型に変換される。[C99, 6.5.16.1, 2]
  • ようするに:
    • 違う型を比較しない。どうしてもしたい時は明示的にキャストして、
      その動作が処理系によって違ったり、ビットがどう動くかまで把握しなければならない。

あとコンパイラの警告は無視しない。
コンパイラの警告レベルは最高にして、それでも警告が出なくなるまで修正する。


引用元:
 http://d.hatena.ne.jp/ha-tan/20070930/1191150366
 http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide21-1.html