0
int main()

{

        char a = 'P';  

        char b = 0x80;  

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

        return 0;

}

为什么它评估为真?

4

1 回答 1

10

在您的系统上,char已签名。它也是八位,因此0x80溢出了带符号的 8 位整数可以表示的内容。结果值为 -128。由于P是一些正值,它大于-128。

C 允许char有符号或无符号的类型。这是一个特殊的(烦人的)属性,不像其他整数类型,例如int. 通常建议显式声明字符类型,unsigned char以便行为更加确定而不是依赖于实现。

于 2013-09-06T17:43:05.720 回答