C语言printf函数的异常现象

#include<stdio.h>
#include<limits.h>
#include<float.h>

int main(void)
{

printf("%d", LLONG_MAX);

}
求问这个的结果为什么是-1
如果我把LLONG_MAX改成LLONG_MIN结果变成了0 又是为什么?

%d,长度不够,遇到0xffffffff就是-1了
printf("%ld", LLONG_MAX);
这样写
9223372036854775807

【以下回答由 GPT 生成】

改进后的问题: 我在使用C语言中的printf函数时遇到了一些异常现象。我通过打印LLONG_MAX和LLONG_MIN的值来观察结果。下面是我的代码:

#include<stdio.h>
#include<limits.h>
#include<float.h>

int main(void)
{
    printf("%d", LLONG_MAX);
}

然而,我发现当我打印LLONG_MAX时,结果却显示为-1。另外,当我将LLONG_MAX改为LLONG_MIN时,结果变成了0。请问这是为什么?

解答: 这是由于你使用了错误的格式化字符导致的。在printf函数中,%d用于格式化输出int类型的值,而LLONG_MAX和LLONG_MIN是long long类型的值。正确的格式化字符应该是%lld,用于格式化输出long long类型的值。

下面是修正后的代码:

#include<stdio.h>
#include<limits.h>
#include<float.h>

int main(void)
{
    printf("%lld", LLONG_MAX);
}

%d改为%lld后再次运行代码,你会发现结果正确地显示出LLONG_MAX的值。同样的,如果你想打印LLONG_MIN,也应该使用%lld来格式化输出。

修正后的代码如下:

#include<stdio.h>
#include<limits.h>
#include<float.h>

int main(void)
{
    printf("%lld", LLONG_MIN);
}

请记住,在使用printf函数时,确保使用正确的格式化字符来匹配要输出的值的类型,这样才能得到正确的结果。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

printf里面的%和变量的一一对应关系
scanf里面的%和变量以及变量前加不加&的一一对应关系
是C代码中非常容易出错的地方,而且通常编译还不出错。
所以在编译源代码之前值得专门仔细检查一遍甚至多遍。

宏就是定义成这样方便在开发过程中使用的,LLONG_MAX表示长长整型也就是long long 或 __int64 值的上限