我在c中打印无符号长字符范围时遇到困难
我试图使用limits.h库和以下代码打印无符号长数据类型的范围我在c中打印无符号长字符范围时遇到困难,c,C,我试图使用limits.h库和以下代码打印无符号长数据类型的范围 #include <stdio.h> #include <limits.h> int main() { printf("The range of UNSIGNED LONG = %lu \n", ULONG_MAX); return 0; } 返回的值是:4294967295 这个值似乎是错误的 用于打印无符号长字符范围的正确占位符是什么 如何更正上述代码段。返回的值
#include <stdio.h>
#include <limits.h>
int main()
{
printf("The range of UNSIGNED LONG = %lu \n", ULONG_MAX);
return 0;
}
返回的值是:4294967295
这个值似乎是错误的
用于打印无符号长字符范围的正确占位符是什么
如何更正上述代码段。返回的值有效 附录E中: 1标题限制.h的内容如下所示,按字母顺序排列。所示最小震级应替换为 实现定义的具有相同符号的震级。数值应为: 所有表达式都应该是常量表达式,适用于if预处理 指令。5.2.4.2.1中进一步描述了这些部件
#define UINT_MAX 65535
#define ULONG_MAX 4294967295
无符号long的大小是由实现定义的,但具有它可以表示的最小值范围。您得到的值在该范围内。其他类型(如unsigned int)有自己的最小值
通常,但并非总是如此,32位操作系统上的编译器的长度为32位,而64位操作系统上的编译器的长度为64位。最有可能的情况是,您使用的是32位系统,带有32位编译器。这在我看来非常正确。为什么看起来是错误的?2^32-1=4294967295为什么您认为该值错误?您是否假设long应该具有64位宽度?在您的实现中,unsigned int和unsigned long的范围是相同的。64位操作系统上的编译器将具有64位long。Windows开发人员从未说过:p通常,32位操作系统或64位Windows上的编译器的长度为32位,而64位POSIX ish系统Unix及其相关系统上的64位编译器的长度为64位。64位Unix类系统上的32位编译可能仍使用32位。谢谢您提供的信息。@EdmundCarvalho很高兴我能提供帮助。如果你觉得它有用的话,请随意使用。