C 打印INT的最大值
我尝试在程序中打印C 打印INT的最大值,c,int,long-long,C,Int,Long Long,我尝试在程序中打印int的最大值。 使用以下代码:: #include <stdio.h> #include <limits.h> int main(void) { printf("%d",INT_MAX); return 0; } #包括 #包括 内部主(空){ printf(“%d”,INT_MAX); 返回0; } 我得到的输出是::2147483647 但是,当我将printf语句更改为printf(“%lld”,INT_MAX)时我的输出变为
int
的最大值。
使用以下代码::
#include <stdio.h>
#include <limits.h>
int main(void) {
printf("%d",INT_MAX);
return 0;
}
#包括
#包括
内部主(空){
printf(“%d”,INT_MAX);
返回0;
}
我得到的输出是::2147483647
但是,当我将printf
语句更改为printf(“%lld”,INT_MAX)时代码>我的输出变为577732524332023807
INT\u MAX
值应该在long long INT
的范围内,那么为什么不能将INT\u MAX
转换为long long INT
中的正确数字呢
感谢您事先提供的帮助。%lld
的int
规范不正确。根据标准,这是未定义的行为:
7.21.6.1fprintf
功能
如果有任何论点是正确的
对应转换规范的类型不正确,行为为
未定义
7.21.6.3printf
功能
printf
函数相当于插入了参数stdout
的fprintf
在printf的参数前面
printf
是一个可变函数,它不知道它的参数类型,它依赖于接收格式字符串中的正确提示
您使用“%lld”
调用了未定义的行为,因为您没有传递长整型
要修复它,您需要强制转换-然后您将看到正确的结果:
printf("%lld", (long long int) INT_MAX);
启用编译器警告?:) 在调用函数时,将4个字节的数据(int-length)推送到堆栈上,然后告诉函数使用调用堆栈中的8个字节来打印它。因此,您的值后面是4字节的垃圾
您可以告诉编译器对此进行检查 如果我写printf(“%lld”,2)代码>会被定义吗???@user007否。它是未定义的。格式规范与类型不匹配。您好,我刚刚遇到了一些与此相关的问题,这不是也有未定义的行为吗???使用%d
打印char
???首先回答这个问题。非常感谢……)先生,还有一件事是long int
和int
相同??因为我尝试打印printf(“%ld”,LONG\u MAX)代码>但其输出与printf(“%d”,INT_MAX)相同代码>但它给出相同的输出。。任何原因??:\@user007:我们说这种行为是由实现定义的。尝试比较sizeof(int)
和sizeof(long)
。对于您的编译器,这些应该具有相同的值(以字节数为单位),但C标准只规定sizeof(int)@grzegorzzpetkowski如果它们与一些编译器具有相同的大小,那么如果它们可以保存相同的值,那么拥有两种不同的数据类型有什么用??我猜我们也不能在long int和not int上执行任何特殊函数,因为它们都是数字..@user007:nope。bool、char、short和unscoped枚举被转换为int或更宽的整数类型,如整数升级