用%c打印577如何输出“A”?

div*_*ean 4 c printf integer char conversion-specifier

#include<stdio.h>
int main()
{
  int i = 577;
  printf("%c",i);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编译后,它给出输出“A”。谁能解释一下我是如何得到这个的?

axe*_*uch 9

%c只接受 255 以内的值,然后又从 0 开始!

577 % 256 = 65; // (char code for 'A')

  • 你是对的:*“int”参数被转换为“unsigned char”,并且结果字符被写入*。 (3认同)
  • 我相信最终 printf 将其转换为无符号字符 (2认同)

dbu*_*ush 7

这与值的转换方式有关。

格式%c说明符需要一个int参数,然后将其转换为 type unsigned charunsigned char然后写入结果的字符。

有关格式说明符的C 标准第 7.21.6.1p8 节printf规定了以下内容c

如果不l存在长度修饰符,则int参数将转换为 unsigned char,并写入结果字符。

将值转换为较小的无符号类型时,实际上发生的情况是高位字节被截断,而低位字节具有结果值。

关于整数转换的第 6.3.1.3p2 节指出:

否则,如果新类型是无符号的,则通过重复加或减比新类型可以表示的最大值大一的方式来转换该值,直到该值在新类型的范围内。

当使用二进制补码表示时,与截断高位字节相同。

对于int值 577,其十六进制值为 0x241,低位字节为 0x41 或十进制 65。在 ASCII 中,此代码是A打印的字符。