2012-09-20 54 views
1

为什么printf("%c ", 2293552);打印0混淆%c和ASCII码

ASCII值是从0到127 我知道这一定是一些周期性的事情,但我想要一个清晰的解释。谢谢

回答

3

编号2293552对应于0x22ff30。当printf将其解释为ASCII时,它将忽略包含0x30(即'0'的代码)的最后8位之后的所有位。

从C99标准:

7.19.1.6.8 - %c:如果没有l长度修饰符,int参数转换为unsigned char,并将得到的字符被写入。

+0

哈!你击败了我的答案,但我击败你的标准报价:D(仅限10k) –

+0

谢谢,再次感谢您的额外支持信息。 –

+0

@DanielFischer哦,是的,我明白了,你没有! – dasblinkenlight

0

可能%c仅使用您的参数的低位字节,即2293552 & 255 = 48 = '0'

+0

谢谢!这是可以理解的。 –