【问题标题】:Char data type arithmetic expressionChar 数据类型算术表达式
【发布时间】:2013-09-06 17:39:16
【问题描述】:
int main()

{

        char a = 'P';  

        char b = 0x80;  

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

        return 0;

}

为什么它的计算结果为真?

【问题讨论】:

标签: c


【解决方案1】:

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

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

【讨论】:

  • 假设 ASCII,P 是 0x50。
  • @user2712068 假设补码为 -127。
  • @DennisMeng:我不知道 OP 的系统是否使用 ASCII,这个假设对于问题没有必要。根据 C 2011 (N1570) 6.2.5 3,执行字符集的字符是非负数。
猜你喜欢
  • 2012-08-14
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2011-10-07
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多