c语言标准库详解(十五):<limits.h>与<float.h>
概述
<limits.h>
头文件<limits.h>定义了一些表示整型大小的常量。以下所列的值是可接受的最小值,在实际系统中可以使用更大的值。
宏 | 值 | 备注 |
---|---|---|
CHAR_BIT | 8 | char 类型的位数 |
CHAR_MAX | UCHAR_MAX 或 SCHAR_MAX | char 类型的最大值 |
CHAR_MIN | 0 或 SCHAR_MIN | char 类型的最小值 |
INT_MAX | 32767 | int 类型的最大值 |
INT_MIN | -32767 | int 类型的最小值 |
LONG_MAX | 2147483647 | long 类型的最大值 |
LONG_MIN | -2147483647 | long 类型的最小值 |
SCHAR_MAX | +127 | signed char 类型的最大值 |
SCHAR_MIN | -127 | signed char 类型的最小值 |
SHRT_MAX | +32767 | short 类型的最大值 |
SHRT_MIN | -32767 | short 类型的最小值 |
UCHAR_MAX | 255 | unsigned char 类型的最大值 |
UINT_MAX | 65535 | unsigend int 类型的最大值 |
ULONG_MAX | 4294967295 | unsigned long 类型的最大值 |
USHRT_MAX | 65535 | unsigned short 类型的最大值 |
<float.h>
下表列出的名字是<float.h>的一个子集,它们是与浮点算术运算相关的一些常量。给出的每个值代表相应量的最小取值。各个实现可以定义适当的值。
宏 | 值 | 备注 |
---|---|---|
FLT_RADIX | 2 | 指数表示的基数,例如 2、16 |
FLT_ROUNDS | -1(无法确定);0(趋向于0);1(趋向最近的值);2(趋向于正无穷);3(趋向于负无穷) | 加法的浮点舍入模式 |
FLT_DIG | 6 | 表示精度的十进制数字 |
FLT_EPSILON | 1E-5 | 最小的数 x,x 满足:1.0 + x ≠ 1.0 |
FLT_MANT_DIG | - | 尾数中的数(以 FLT_RADIX 为基数) |
FLT_MAX | 1E+37 | 最大的浮点数 |
FLT_MAX_EXP | - | 最大的数 n,n 满足 FLT_RADIX^n-1 仍是可表示的 |
FLT_MIN | 1E-37 | 最小的规格化浮点数 |
FLT_MIN_EXP | - | 最小的数 n,n 满足:10^n是一个规格化数 |
DBL_DIG | 10 | 表示精度的十进制数字 |
DBL_EPSILON | 1E-9 | 最小的数 x,x 满足:1.0 + x ≠ 1.0 |
DBL_MANT_DIG | - | 尾数中的数(以 FLT_RADIX 为基数) |
DBL_MAX | 1E+37 | 最大的双精度浮点数 |
DBL_MAX_EXP | - | 最大的数 n,n 满足 FLT_RADIX^n-1 仍是可表示的 |
DBL_MIN | 1E-37 | 最小的规格化双精度浮点数 |
DBL_MIN_EXP | - | 最小的数 n,n 满足:10n是一个规格化数 |
示例
<limits.h>
代码:
#include <stdio.h>
#include <limits.h>
int main()
{printf("The number of bits in a byte %d\n", CHAR_BIT);printf("The minimum value of SIGNED CHAR = %d\n", SCHAR_MIN);printf("The maximum value of SIGNED CHAR = %d\n", SCHAR_MAX);printf("The maximum value of UNSIGNED CHAR = %d\n", UCHAR_MAX);printf("The minimum value of SHORT INT = %d\n", SHRT_MIN);printf("The maximum value of SHORT INT = %d\n", SHRT_MAX); printf("The minimum value of INT = %d\n", INT_MIN);printf("The maximum value of INT = %d\n", INT_MAX);printf("The minimum value of CHAR = %d\n", CHAR_MIN);printf("The maximum value of CHAR = %d\n", CHAR_MAX);printf("The minimum value of LONG = %ld\n", LONG_MIN);printf("The maximum value of LONG = %ld\n", LONG_MAX); return(0);
}
输出:
PS G:\CSAPP> & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-mq52rrfg.0x4' '--stdout=Microsoft-MIEngine-Out-ip53akbp.xpk' '--stderr=Microsoft-MIEngine-Error-w2wgdudi.u2t' '--pid=Microsoft-MIEngine-Pid-2z44vy4h.eqv' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
The number of bits in a byte 8
The minimum value of SIGNED CHAR = -128
The maximum value of SIGNED CHAR = 127
The maximum value of UNSIGNED CHAR = 255
The minimum value of SHORT INT = -32768
The maximum value of SHORT INT = 32767
The minimum value of INT = -2147483648
The maximum value of INT = 2147483647
The minimum value of CHAR = -128
The maximum value of CHAR = 127
The minimum value of LONG = -2147483648
The maximum value of LONG = 2147483647
PS G:\CSAPP>
<float.h>
代码:
#include <stdio.h>
#include <float.h>
int main()
{printf("The maximum value of float = %.10e\n", FLT_MAX);printf("The minimum value of float = %.10e\n", FLT_MIN);printf("The number of digits in the number = %.10e\n", FLT_MANT_DIG);
}
输出:
PS G:\CSAPP> & 'c:\Users\swy\.vscode\extensions\ms-vscode.cpptools-0.27.1\debugAdapters\bin\WindowsDebugLauncher.exe' '--stdin=Microsoft-MIEngine-In-vvxt3sdn.m45' '--stdout=Microsoft-MIEngine-Out-lxfp3hgw.ny4' '--stderr=Microsoft-MIEngine-Error-uyop3yxf.gya' '--pid=Microsoft-MIEngine-Pid-flbfwpeh.hj3' '--dbgExe=G:\x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0\mingw64\bin\gdb.exe' '--interpreter=mi'
The maximum value of float = 3.4028234664e+038
The minimum value of float = 1.1754943508e-038
The number of digits in the number = 1.1857575500e-322
PS G:\CSAPP>