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”。谁能解释一下我是如何得到这个的?
%c
只接受 255 以内的值,然后又从 0 开始!
577 % 256 = 65; // (char code for 'A')
这与值的转换方式有关。
格式%c
说明符需要一个int
参数,然后将其转换为 type unsigned char
。unsigned char
然后写入结果的字符。
有关格式说明符的C 标准第 7.21.6.1p8 节printf
规定了以下内容c
:
如果不
l
存在长度修饰符,则int
参数将转换为unsigned char
,并写入结果字符。
将值转换为较小的无符号类型时,实际上发生的情况是高位字节被截断,而低位字节具有结果值。
关于整数转换的第 6.3.1.3p2 节指出:
否则,如果新类型是无符号的,则通过重复加或减比新类型可以表示的最大值大一的方式来转换该值,直到该值在新类型的范围内。
当使用二进制补码表示时,与截断高位字节相同。
对于int
值 577,其十六进制值为 0x241,低位字节为 0x41 或十进制 65。在 ASCII 中,此代码是A
打印的字符。