当前位置:嗨网首页>书籍在线阅读

09-明示常量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.3.2 明示常量

C头文件 limits.hfloat.h 分别提供了与整数类型和浮点类型大小限制相关的详细信息。每个头文件都定义了一系列供实现使用的明示常量[3]。例如, limits.h 头文件包含以下类似的代码:

#define INT_MAX +32767
#define INT_MIN -32768

这些明示常量代表 int 类型可表示的最大值和最小值。如果系统使用 32 位的 int ,该头文件会为这些明示常量提供不同的值。如果在程序中包含 limits.h 头文件,就可编写下面的代码:

printf("Maximum int value on this system = %d\n", INT_MAX);

如果系统使用 4 字节的 intlimits.h 头文件会提供符合 4 字节 intINT_MAXINT_MIN 。表 4.1 列出了 limits.h 中能找到的一些明示常量。

表4.1  `limits.h` 中的一些明示常量

| 明示常量 | 含义 | | :----- | :----- | :----- | :----- | | CHAR_BIT | char 类型的位数 | | CHAR_MAX | char 类型的最大值 | | CHAR_MIN | char 类型的最小值 | | SCHAR_MAX | signed char 类型的最大值 | | SCHAR_MIN | signed char 类型的最小值 | | UCHAR_MAX | unsigned char 类型的最大值 | | SHRT_MAX | short 类型的最大值 | | SHRT_MIN | short 类型的最小值 | | USHRT_MAX | unsigned short 类型的最大值 | | INT_MAX | int 类型的最大值 | | INT_MIN | int 类型的最小值 | | UINT_MAX | unsigned int 的最大值 | | LONG_MAX | long 类型的最大值 | | LONG_MIN | long 类型的最小值 | | ULONG_MAX | unsigned long 类型的最大值 | | LLONG_MAX | long long 类型的最大值 | | LLONG_MIN | long long 类型的最小值 | | ULLONG_MAX | unsigned long long 类型的最大值 |

类似地, float.h 头文件中也定义一些明示常量,如 FLT_DIGDBL_DIG ,分别表示 float 类型和 double 类型的有效数字位数。表 4.2 列出了 float.h 中的一些明示常量(可以使用文本编辑器打开并查看系统使用的 float.h 头文件)。表中所列都与 float 类型相关。把明示常量名中的 FLT 分别替换成 DBLLDBL ,即可分别表示 doublelong double 类型对应的明示常量(表中假设系统使用 2 的幂来表示浮点数)。

表4.2  `float.h` 中的一些明示常量

| 明示常量 | 含义 | | :----- | :----- | :----- | :----- | | FLT_MANT_DIG | float 类型的尾数位数 | | FLT_DIG | float 类型的最少有效数字位数(十进制) | | FLT_MIN_10_EXP | 带全部有效数字的 float 类型的最小负指数(以 10 为底) | | FLT_MAX_10_EXP | float 类型的最大正指数(以 10 为底) | | FLT_MIN | 保留全部精度的 float 类型最小正数 | | FLT_MAX | float 类型的最大正数 | | FLT_EPSILON | 1.00 和比 1.00 大的最小 float 类型值之间的差值 |

程序清单 4.5 演示了如何使用 float.hlimits.h 中的数据(注意,编译器要完全支持 C99 标准才能识别 LLONG_MIN 标识符)。

程序清单4.5  defines.c 程序

// defines.c -- 使用limit.h和float头文件中定义的明示常量
#include <stdio.h>
#include <limits.h>    // 整型限制
#include <float.h>     // 浮点型限制
int main(void)
{
     printf("Some number limits for this system:\n");
     printf("Biggest int: %d\n", INT_MAX);
     printf("Smallest long long: %lld\n", LLONG_MIN);
     printf("One byte = %d bits on this system.\n", CHAR_BIT);
     printf("Largest double: %e\n", DBL_MAX);
     printf("Smallest normal float: %e\n", FLT_MIN);
     printf("float precision = %d digits\n", FLT_DIG);
     printf("float epsilon = %e\n", FLT_EPSILON);
     return 0;
}

该程序的输出示例如下:

Some number limits for this system:
Biggest int: 2147483647
Smallest long long: -9223372036854775808
One byte = 8 bits on this system.
Largest double: 1.797693e+308
Smallest normal float: 1.175494e-38
float precision = 6 digits
float epsilon = 1.192093e-07

C预处理器是非常有用的工具,要好好利用它。本书后面的章节中会介绍更多相关应用。