ascii字符限制为255? #包括 #包括 main() { int i=369; printf(“%c”,i); getch(); } O/p === Q

ascii字符限制为255? #包括 #包括 main() { int i=369; printf(“%c”,i); getch(); } O/p === Q,c,ascii,C,Ascii,这里,将“q”作为输出 我怀疑ascii字符限制是255。但是为什么它要把“q”作为输出呢?它被转换成一个字节。369%256=113='q'ascii的限制是255,但是369=0000 0001 0111 0001,而q的ascii代码是0111 0001,请参见最后8位?你说对了 printf()中的%c获取int参数369并将其转换为无符号字符,该字符的值为369&255或113。字符代码113对应于使用ASCII编码的系统上的'q'。因此,“q”被打印出来 C11dr§7.21.6.1

这里,将“q”作为输出


我怀疑ascii字符限制是255。但是为什么它要把“q”作为输出呢?

它被转换成一个字节。369%256=113='q'

ascii的限制是255,但是369=0000 0001 0111 0001,而q的ascii代码是0111 0001,请参见最后8位?你说对了

printf()中的
%c
获取
int
参数
369
并将其转换为
无符号字符
,该字符的值为
369&255
113
。字符代码113对应于使用ASCII编码的系统上的
'q'
。因此,
“q”
被打印出来

C11dr§7.21.6.1 8 c转换说明符
如果不存在l长度修饰符,int参数将转换为无符号字符,并写入结果字符


[编辑]

典型的C系统有一个8位的
字符
,允许256种组合,因此上面的
&255
(一些系统有其他的
字符
大小)。典型的C系统将值0到127分配给ASCII字符集-该字符集仅为代码0到127定义。打印出来的文本值可能超出该范围。如果你看ascii图表,你会看到限制是128。@Scotty Bauer我认为限制是127。典型的
UCHAR\u MAX
是255,这就是为什么369被截断为8位。范围是0到127。更精确地说,扩展的ASCII是0-255
#include<stdio.h>
#include<conio.h>
main()
{
    int i=369;
    printf("%c",i);
    getch();
}



O/p
===
q