printf函数关于截断和整形问题
- printf在传入参数的时候如果是整形会默认传入四字节
- 由于printf是可变参数的函数,所以后面参数的类型是未知的,所以甭管你传入的是什么类型,printf只会根据类型的不同将用两种不同的长度存储。其中8字节的只有long long、float和double(注意float会处理成double再传入),其他类型都是4字节。
- 读取时,%lld、%llx等整型方式和%f、%lf等浮点型方式读8字节,其他读4字节。
例题:
int main()
{unsigned char a = 200;unsigned char b = 100;unsigned char c = 0;c = a + b;printf(“%d %d”, a+b,c);//打印的结果为?return 0;
}
根据以上三点可知:
虽然a + b的类型是char,实际接收时还是用一个四字节整数接收的
a+b的结果是用一个四字节的整数接收的,不会越界
c已经在c = a + b这一步中丢弃了最高位的1,所以只能是300-256得到的44了。
所以答案是 300 44
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
