#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 值的上限