我读过 type-casting in C ,包括隐式、显式类型转换以及整数提升。
但是在下面的语句中发生了什么,
printf("%ld\n", 10000*10000);
我得到的输出为 100000000
。
格式说明符 %ld
是否也会导致类型转换或行为未定义?我期望得到一些垃圾值(从最大值循环),因为 int 的最大值是 +32767。
无论上面的语句发生什么,下面的语句都不会发生,
printf("%f\n", 5/2); //probably 5 is double ?? If yes, how's the result justified
输出是:-0.109126
。为什么?
最佳答案
第一种情况:
printf("%ld\n", 10000*10000);
文字 10000
是一个 int
。在大多数系统上,int
至少是 32 位的。所以 10000*10000
的计算结果为 100000000
,也是一个 int
。 printf
但是它正在寻找一个 long int
。所以这是未定义的行为,不管您是否得到了预期的结果。
在这种情况下:
printf("%f\n", 5/2);
文字 5
和 2
是 int
类型,因此执行整数除法并得到结果值 2
也是 int
类型。 printf
然后尝试将此 int
值作为 float
读取,从而导致未定义的行为。
关于c - 打印值时了解 C 中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287153/