为什么'u0'= C = 30000?

时间:2015-11-22 01:47:24

标签: c

以下是代码:

#include <stdio.h>

int main()
{
    printf("%d %c",'u0','u0');
    return 0;
}

当我在我的机器上运行它时,输出是“30000 0”,我从未见过'u0'用于表示一个字符(或者实际上可能是一个整数)。 也许这意味着字符/整数是无符号的?

1 个答案:

答案 0 :(得分:5)

这是一个多字符常量。它具有类型int和实现定义的值。

引用C标准的最新草案(N1570),第6.4.4.4节第10段:

  

包含多个的整数字符常量的值   性格(例如,    'ab' ),或者包含不映射到单字节执行字符的字符或转义序列,   实现定义的。

至于为什么它具有特定值30000,显然你的编译器给常量'u0'赋值'u' << 8 + '0'。由于'u'==117'0'==48(在基于ASCII的字符集中),结果为30000。但不要指望那个特定的价值;它可能因其他编译器而异。

我建议不要使用这些常量。