int main()
{
char a = 'P';
char b = 0x80;
printf("a>b %s\n",a>b ? "true":"false");
return 0;
}
为什么评估为真?
答案 0 :(得分:10)
在您的系统上,char
已签名。它也是8位,因此0x80
溢出了带符号的8位整数所代表的含义。结果值为-128。由于P
是一些正值,因此它大于-128。
C允许char
类型签名或未签名。这是一个特殊的(恼人的)属性,与int
等其他整数类型不同。通常建议使用unsigned char
显式声明字符类型,以便更加确定行为,而不是依赖于实现。