各位大佬帮忙解释一下为啥%c输出是这样

 

365转成16进制是16d,但是char只支持两个十六进制数,最高位的1就会被阉割掉,
对照ascii码表 结果就是 m,后面的同理

298转成16进制是12A,去掉最高位1,2A,是*

因为你的占位符和数据类型没有对上啊,%c是字符型数据的占位符。而你的ch1和ch2都是int类型的。

正常情况下,ASCII可显示字符在33到126之间,而超过256的数字,因为char只有8位,所以你的int就会被截断,只保留后面8个2进制位,即365的二进制101101101就会变成(01101101),即109,相当于365-256,同样的298一样,会变成42。109和42在ASCII码表上对应的字符就是m和*。

char类型1个字节,共8位

int转char丢掉高位

 

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632