ok,先来看看这个题
运行之后的结果是什么
#include <stdio.h>
int main(void)
{
short end = 200;
printf("end = %hd and %d\n", end, end);
return 0
}
没错 ,都是200.
这边有两个比较需要注意的点。
对于short类型的变量end,在printf()中无论指定 以short类型(%hd)还是int类型(%d) 打印,打印出来的值都相同。
这是因为在给函数传递参数时,C编译器把short类型的值自动转换成int类型的值。(后面的隐式转换也是会用到这些点的)你可能会提出疑问:为什么要进行转换?h修饰符有什么用?
1️⃣第1个问题的答案是,
int类型被认为是计算机处理整数类型时最高效的类型。 因此,在short和int类型的大小不同的计算机中,用int类型的参数传递速度更快。
2️⃣第2个问题的答案是,
使用h修饰符可以显示较大整数被截断成 short 类型值的情况。
举个例子
把 65537 以二进制格式写成一个 32 位数是
00000000000000010000000000000001。
使用 %hd,printf()只会查看后 16位,所以显示的值是 1 。与此类似,如果使用了%ld,printf()只显示了储存在后32位的值。
最后要注意的是,在使用 printf()函数时,切记检查每个待打印值都有对应的转换说明,还要检查转换说明的类型是否与待打印值的类型相匹配
————————————————
版权声明:本文为CSDN博主「~光~~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_53131867/article/details/140328548
|