あるプログラマの日記

プログラマのメモ、出来事、考えたこと、勉強とかの雑記

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をつけておくと
判断の時に意図するものと違う値に判断されることがなくなる。