C 字符数据类型算术表达式

C 字符数据类型算术表达式,c,C,为什么计算结果为true?在您的系统上,char被签名。它也是8位的,因此0x80溢出有符号8位整数可以表示的内容。结果值为-128。因为P是某个正值,所以它大于-128 C允许对char类型进行签名或不签名。这是一个特殊的(恼人的)属性,不同于其他整数类型,如int。通常建议使用无符号字符显式声明字符类型,以便行为更加确定,而不是依赖于实现。假设ASCII,p为0x50。@user2712068假设两个字符的补码为-127。@DennisMeng:我不知道OP的系统是否使用ASCII,对于这个

为什么计算结果为true?

在您的系统上,
char
被签名。它也是8位的,因此
0x80
溢出有符号8位整数可以表示的内容。结果值为-128。因为
P
是某个正值,所以它大于-128


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

假设ASCII,
p
为0x50。@user2712068假设两个字符的补码为-127。@DennisMeng:我不知道OP的系统是否使用ASCII,对于这个问题,这个假设是不必要的。根据C 2011(N1570)6.2.5 3,执行字符集的字符为非负。
P
的ASCII值恰好为(十进制)80。您是否将十进制
80
与十六进制
0x80
混淆?请阅读
int main()

{

        char a = 'P';  

        char b = 0x80;  

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

        return 0;

}