字符数据类型算术表达式

时间:2013-09-06 17:39:16

标签: c

int main()

{

        char a = 'P';  

        char b = 0x80;  

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

        return 0;

}

为什么评估为真?

1 个答案:

答案 0 :(得分:10)

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

C允许char类型签名或未签名。这是一个特殊的(恼人的)属性,与int等其他整数类型不同。通常建议使用unsigned char显式声明字符类型,以便更加确定行为,而不是依赖于实现。