e5774.c

符号拡張

/* B:e5774: "char"から"int"への暗黙的型変換で符号拡張を引き起こす可能性があります */

void x() { char c = 0xff; int i = c; if(i == 0xff) { puts("i == 0xff"); } if(i == 0xffffffff) { puts("i == 0xffffffff"); } }
解説 int i = c;の時点で符号拡張が起こるため、i == 0xffでは無く、 i == -1(i == 0xffffffff)となっています。 ビットパターンを扱う時はunsignedで扱った方が安全です。