为什么输出cChar1和cChar2结果都是a呢?
char是整数型,这是标准保证了的。但要注意:
1、和其他整数型都是默认有符号不同,标准没有规定char是否有符号。如果有需要,需要显式指定signed或unsigned。
2、char存储ASCII码的说法是错误的。标准没有规定char的字符集,不兼容ASCII的也是可以的,虽然很少见。但是特别强调:这不影响这段代码将数字字符转为数字的正确性:
char x='5';
printf("%d", x - '0'); // 输出一定是5
这是因为,标准规定:无论char采用何种字符集,其中的数字字符的整数值必须是连续的。
====分割线====
由于多数平台采用ASCII码作为char的字符集,而ASCII中字符a的编码就是97,因此输出当然是一样的。
计算机中,所有东西都被编码为二进制序列来保存,从文本到图像再到视频,莫不如此。字符也是有编码的,这里的ASCII就是一种编码方案。当兼容ASCII的终端遇到二进制串0110 0001(也就是97的二进制形式)时,就将其解释为字符a。(字符串“97”则是:0011 1001 0011 0111)至于为什么这么编码……只能说是历史原因,没有那么多为什么。但它总得有一个编码吧——事实上,计算机内不存在任何未经编码的东西。计算机中,任何东西的处理都要经过编码-解码的过程,甚至包括数字本身(补码)。