打印char的十进制值

Jai*_*esh 0 c

用于打印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

Iha*_*imi 9

因为它'AB'是一个多字符常量,其值是实现定义的,无论它是否在原则上66是" 不可预测的 ",并且在实践中虽然可预测在不同的实现中是不同的.

通常,您只在单引号中间使用单个字符.如果您使用多个字符,

  1. 编译器应该警告它.
  2. 如果对应的值int是" 不可预测的 ",因为它的实现已定义.当然,给定一个实现,我们希望多字符常量总是具有相同的值.

如果您使用过gcc,那么根据此来源会发生这种情况

编译器一次评估一个字符的多字符字符常量,将前一个值移动每个目标字符的位数,然后在截断到目标宽度的新字符的位模式中输入字符.最终的位模式为int类型,因此无论单个字符是否有符号都是有符号的.如果常量中的字符数多于目标int中的字符数,则编译器会发出警告,并忽略多余的前导字符.

例如,'ab'对于具有8位char的目标,将被解释为' (int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')'和'\234a'' (int) ((unsigned char) '\234' * 256 + (unsigned char) 'a')'