用于打印char的十进制值的程序:
#include<stdio.h>
int main(void){
char ch = 'AB';
printf("ch is %d\n",ch);
}
Run Code Online (Sandbox Code Playgroud)
为什么打印第二个字符的十进制值,为什么不是第一个字符的十进制值?
输出: ch is 66
因为它'AB'是一个多字符常量,其值是实现定义的,无论它是否在原则上66是" 不可预测的 ",并且在实践中虽然可预测在不同的实现中是不同的.
通常,您只在单引号中间使用单个字符.如果您使用多个字符,
int是" 不可预测的 ",因为它的实现已定义.当然,给定一个实现,我们希望多字符常量总是具有相同的值.编译器一次评估一个字符的多字符字符常量,将前一个值移动每个目标字符的位数,然后在截断到目标宽度的新字符的位模式中输入字符.最终的位模式为int类型,因此无论单个字符是否有符号都是有符号的.如果常量中的字符数多于目标int中的字符数,则编译器会发出警告,并忽略多余的前导字符.
例如,
'ab'对于具有8位char的目标,将被解释为'(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')'和'\234a''(int) ((unsigned char) '\234' * 256 + (unsigned char) 'a')'