#include<stdio.h>
#include<conio.h>
main()
{
int i=369;
printf("%c",i);
getch();
}
O/p
===
q
这里,将'q'作为输出。
我怀疑ascii字符限制是255。但是为什么它会给'q'作为输出?
答案 0 :(得分:8)
它被强制转换为一个字节。 369%256 = 113 ='q'
答案 1 :(得分:4)
"%c"
中的printf()
获取int
参数369
,并将其转换为unsigned char
,其值为369 & 255
或{{ 1}}。字符代码113对应于使用ASCII编码的系统上的113
。因此打印'q'
。
C11dr§7.21.6.18 c转换说明符
“如果不存在l长度修饰符,则将int参数转换为unsigned char,并写入生成的字符。”
[编辑]
典型的C系统具有8位'q'
,允许256种组合,因此上述char
(某些系统具有其他& 255
大小)。典型的C系统将值0到127分配给ASCII字符集 - 仅为代码0到127定义 。可能打印出的值超出该范围的值会发生变化。
答案 2 :(得分:0)
ascii的限制是255,但是369 = 0000 0001 0111 0001,而q的ascii代码是0111 0001,请看最后8位?你懂了!