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>