use*_*345 0 c printf ascii character
我有这行代码:
printf("%c\n", '65');
Run Code Online (Sandbox Code Playgroud)
此代码打印5到控制台.
我知道这65不是一个有效的字符,并没有分配给任何ASCII值,那么这个输出背后的原因是什么?
单引号给出字符的ascii值,称为字符常量
printf("%c\n", '65');
Run Code Online (Sandbox Code Playgroud)
是一个multicharacter constant,这是实现定义
65是'A'字符的ascii值所以我想你的意思
printf("%c\n", 'A');
Run Code Online (Sandbox Code Playgroud)
这相当于
printf("%c\n", 65);
Run Code Online (Sandbox Code Playgroud)
使用多字符字符常量是实现定义的.例如gcc说,
编译器一次评估一个字符的多字符字符常量,将前一个值移动每个目标字符的位数,然后在截断到目标宽度的新字符的位模式中输入字符.最终的位模式为int类型,因此无论单个字符是否有符号都是有符号的(与版本3.1及更早版本的GCC略有不同).如果常量中的字符数多于目标int中的字符数,则编译器会发出警告,并忽略多余的前导字符.
例如,
'ab'对于具有8位char的目标,将被解释为'(int) ((unsigned char) 'a' * 256 + (unsigned char) 'b')',并且'\234a'作为'(int) ((unsigned char) '\234' * 256 + (unsigned char) 'a')'.
所以gcc你会得到5自
printf("%c\n", '65');
Run Code Online (Sandbox Code Playgroud)
是等价的
printf("%c\n", (int)(((unsigned char)'6' * 256) | (unsigned char)'5'));
Run Code Online (Sandbox Code Playgroud)
最后从问题的标题来看,这似乎是你想要的
printf("%d\n", 65);
Run Code Online (Sandbox Code Playgroud)
即打印十进制值65.