0
int main()

{

        char a = 'P';  

        char b = 0x80;  

        printf("a>b  %s\n",a>b ? "true":"false");  

        return 0;

}

Why does it evaluates to true?

4

1 に答える 1

10

お使いのシステムでcharは、署名されています。これも 8 ビットであるため0x80、符号付き 8 ビット整数で表現できるオーバーフローが発生します。結果の値は -128 です。Pは正の値であるため、-128 より大きくなります。

C では、char型を符号付きまたは符号なしにすることができます。などの他の整数型とは異なり、これは特別な (面倒な) プロパティintです。unsigned char動作が実装に依存するのではなく、より決定されるように、文字型を明示的に宣言することをお勧めします。

于 2013-09-06T17:43:05.720 に答える