limits.h
头文件定义表示每种类型的限制值符号。下表显示了与每个有符号整数类型的限制对应的符号名称。
类型 | 最小值 | 最大值 |
---|---|---|
char |
CHAR_MIN | CHAR_MAX |
short |
SHRT_MIN | SHRT_MAX |
int |
INT_MIN | INT_MAX |
long |
LONG_MIN | LONG_MAX |
long long |
LLONG_MIN | LLONG_MAX |
无符号整数类型的下限均为0
,因此是无符号。对应于无符号整数类型的上限有符号是:UCHAR_MAX
,USHRT_MAX
,UINT_MAX
,ULONG_MAX
和ULLONG_MAX
。
要使用这些符号中的任何一个,必须在源文件中使用#include
指令包含limits.h
头文件:
#include <limits.h>
可以使用int
类型的最大值初始化变量,如下所示:
int number = INT_MAX;
float.h
头文件定义了浮点值的符号。定义三个浮点类型表示的最大和最小正值的符号,如下表所示。
类型 | 下限(最小)值 | 上限(最大)值 |
---|---|---|
float |
FLT_MIN |
FLT_MAX |
double |
DBL_MIN |
DBL_MAX |
long double |
LDBL_MIN |
LDBL_MAX |
以下程序输出与头文件中定义的符号对应的值,它将打印显示编译器的限制值。
示例代码
#include <stdio.h> // For command line input and output
#include <limits.h> // For limits on integer types
#include <float.h> // For limits on floating-point types
int main(void)
{
printf("char类型的变量存储值范围是: %d 至 %d\n", CHAR_MIN, CHAR_MAX);
printf("无符号char类型的变量存储值范围是: 0 至 %u\n", UCHAR_MAX);
printf("short类型的变量存储值范围是: %d 至 %d\n", SHRT_MIN, SHRT_MAX);
printf("无符号short类型的变量存储值范围是: 0 至 %u\n", USHRT_MAX);
printf("int类型的变量存储值范围是: %d 至 %d\n", INT_MIN, INT_MAX);
printf("无符号int类型的变量存储值范围是: 0 至 %u\n", UINT_MAX);
printf("long类型的变量存储值范围是: %ld 至 %ld\n", LONG_MIN, LONG_MAX);
printf("无符号long类型的变量存储值范围是: 0 至 %lu\n", ULONG_MAX);
printf("long long类型的变量存储值范围是: %lld 至 %lld\n", LLONG_MIN, LLONG_MAX);
printf("无符号long long类型的变量存储值范围是: 0 至 %llu\n", ULLONG_MAX);
printf("//*************************************************************//\n");
printf("float类型的最小正非零值是: %.3e\n", FLT_MIN);
printf("float类型的最大值是: %.3e\n", FLT_MAX);
printf("double类型的最小非零值是: %.3e\n", DBL_MIN);
printf("double类型的最大值是: %.3e\n", DBL_MAX);
printf("long double类型的最小非零值是: %.3Le\n", LDBL_MIN);
printf("long double类型的最大值是: %.3Le\n", LDBL_MAX);
printf("//*************************************************************//\n");
printf("float类型的变量提供 %u 十进制数字精度。\n", FLT_DIG);
printf("double类型的变量提供 %u 十进制数字精度。\n", DBL_DIG);
printf("long double类型的变量提供 %u 十进制数字精度。\n", LDBL_DIG);
return 0;
}
执行上面示例代码,得到以下结果:
hema@ubuntu:~/book$ gcc -o main main.c
hema@ubuntu:~/book$ ./main
char类型的变量存储值范围是: -128 至 127
无符号char类型的变量存储值范围是: 0 至 255
short类型的变量存储值范围是: -32768 至 32767
无符号short类型的变量存储值范围是: 0 至 65535
int类型的变量存储值范围是: -2147483648 至 2147483647
无符号int类型的变量存储值范围是: 0 至 4294967295
long类型的变量存储值范围是: -9223372036854775808 至 9223372036854775807
无符号long类型的变量存储值范围是: 0 至 18446744073709551615
long long类型的变量存储值范围是: -9223372036854775808 至 9223372036854775807
无符号long long类型的变量存储值范围是: 0 至 18446744073709551615
//*************************************************************//
float类型的最小正非零值是: 1.175e-38
float类型的最大值是: 3.403e+38
double类型的最小非零值是: 2.225e-308
double类型的最大值是: 1.798e+308
long double类型的最小非零值是: 3.362e-4932
long double类型的最大值是: 1.190e+4932
//*************************************************************//
float类型的变量提供 6 十进制数字精度。
double类型的变量提供 15 十进制数字精度。
long double类型的变量提供 18 十进制数字精度。
上面程序怎么运行?
在一系列printf()
函数调用中输出limits.h
和float.h
头文件中定义的符号值。
%u
说明符输出无符号整数值。%e
说明符用于浮点限制,它以指数形式显示值。
上面代码中只指定三位数的精度,因为不需要输出中的完全精确度。
当printf()
函数显示long double
类型的值时,需要指定L
修饰符。%f
说明符表示没有指数的值。