C言語の signed とunsigned の違いではまりやすいパターン
C言語の signed とunsigned の違いではまりやすいパターン
(C言語プログラミングでの落とし穴)
基本的なことなのですが、
はまると?になってしまうので注意です。
char data; data = 0xFF; if (data == 0xFF) { // int型にキャストされるので、dataは-1、0xFFは255になる。 } else { // この場合はこちらの条件になる。 // int型では0xFFは、10進数で255 dataに代入された0xFFは、-1 になる。 } unsigned char data2; data2 = 0xFF; if (data2 == 0xFF) { // この場合はこちらの条件になる。 // int型にキャストされるので、data2は255、0xFFも255になる。 } else { // 0xFFは、10進数で255 data2に代入された0xFFは、255になる。 }
signed charの範囲は -128〜127
unsigned char の範囲は 0〜255
どちらも0x00〜0xFFが表現できるが整数値としてみた場合に違いがある。
charをunsignedにする場合は、バイナリデータ等を扱う時が多い。
16進数として扱うデータの場合は、型宣言はunsignedをつけておくと
判断の時に意図するものと違う値に判断されることがなくなる。