打印INT的最大值

时间:2014-10-05 20:21:27

标签: c int long-long

我尝试在程序中打印int的最大值。 使用以下代码::

#include <stdio.h>
#include <limits.h>
int main(void) {
    printf("%d",INT_MAX);
    return 0;
}

我得到的输出是:: 2147483647

但是,当我将printf语句更改为printf("%lld",INT_MAX);时,我的输出变为577732524332023807INT_MAX值应该在long long int范围内,那么为什么它无法将INT_MAX转换为long long int中的正确数字。

感谢您提前提供任何帮助。

3 个答案:

答案 0 :(得分:7)

printf是一个可变函数,它不知道它的参数类型,它依赖于在格式字符串中接收正确的提示。

您使用"%lld"调用了未定义的行为,因为您尚未通过long long int

要修复它,你需要施放 - 然后你会看到正确的结果:

printf("%lld", (long long int) INT_MAX);

启用编译器警告? :)

答案 1 :(得分:6)

%lldint的错误规范。根据标准,它是未定义的行为:

  

7.21.6.1 fprintf功能

     

...

     

如果有任何论据   不是相应转换规范的正确类型,行为是   未定义。


  

7.21.6.3 printf功能

     

...

     

printf 功能相当于 fprintf ,参数 stdout   在 printf 的参数之前。

答案 2 :(得分:5)

在调用函数时将4个字节的数据(int-length)压入堆栈,然后告诉函数从调用堆栈中消耗8个字节来打印它。所以你的价值落后于4个字节的垃圾。

您可以告诉编译器检查这个。