c - 打印值时了解 C 中的类型转换

标签 c

我读过 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,也是一个 intprintf 但是它正在寻找一个 long int。所以这是未定义的行为,不管您是否得到了预期的结果。

在这种情况下:

printf("%f\n", 5/2);

文字 52int 类型,因此执行整数除法并得到结果值 2 也是 int 类型。 printf 然后尝试将此 int 值作为 float 读取,从而导致未定义的行为。

关于c - 打印值时了解 C 中的类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33287153/

相关文章:

将十六进制形式的文本转换为 C 语言中的字符

c - 我无法在 ‘;’ token 之前解决我的代码预期表达式中的此错误

c - 使用数据镜像保护数据损坏

c - 什么是c中的强类型?

c++ - 带着面具搜索

C Malloc 3D 数组

c - 为启动时运行的 linux 内核添加代码

c 也有 const 值,但它们不能用作数组边界?

c - 为什么我无法打印空格字符?

c++ - 返回连续数字的逻辑假设数组包含元素 1,9,2,3,4,9,6,7,8 那么它应该返回 2,3,4,6,7,8?