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