20-总结_基本数据类型
B.3.1 总结:基本数据类型
C语言的基本数据类型分为两大类:整数类型和浮点数类型。不同的种类提供了不同的范围和精度。
1.关键字
创建基本数据类型要用到8个关键字: int 、 long 、 short 、 unsigned 、 char 、 float 、 double 、 signed (ANSI C)。
2.有符号整数
有符号整数可以具有正值或负值。
int 是所有系统中基本整数类型。
long 或 long int 可存储的整数应大于或等于 int 可存储的最大数; long 至少是 32 位。
short 或 short int 整数应小于或等于 int 可存储的最大数; short 至少是 16 位。通常, long 比 short 大。例如,在 PC 中的 C DOS 编译器提供 16 位的 short 和 int 、 32 位的 long 。这完全取决于系统。
C99 标准提供了 long long 类型,至少和 long 一样大,至少是 64 位。
3.无符号整数
无符号整数只有 0 和正值,这使得该类型能表示的正数范围更大。在所需的类型前面加上关键字 unsigned : unsigned int 、 unsigned long 、 unsigned short 、 unsigned long long 。单独的 unsigned 相当于 unsigned int 。
4.字符
字符是如 A 、 & 、 + 这样的印刷符号。根据定义, char 类型的变量占用1字节的内存。过去, char 类型的大小通常是8位。然而,C在处理更大的字符集时, char 类型可以是16位,或者甚至是32位。
这种类型的关键字是 char 。一些实现使用有符号的 char ,但是其他实现使用无符号的 char 。 ANSI C 允许使用关键字 signed 和 unsigned 指定所需类型。从技术层面上看, char 、 unsigned char 和 signed char 是3种不同的类型,但是 char 类型与其他两种类型的表示方法相同。
5.布尔类型(C99)
_Bool 是C99新增的布尔类型。它一个无符号整数类型,只能存储 0 (表示假)或 1 (表示真)。包含 stdbool.c 头文件后,可以用 bool 表示 _Bool 、 ture 表示 1 、 false 表示 0 ,让代码与 C++ 兼容。
6.实浮点数和复浮点数类型
C99识别两种浮点数类型:实浮点数和复浮点数。浮点类型由这两种类型构成。
实浮点数可以是正值或负值。C识别3种实浮点类型。
float
是系统中的基本浮点类型。它至少可以精确表示6位有效数字,通常
float
为32位。
double
(可能)表示更大的浮点数。它能表示比
float
更多的有效数字和更大的指数。它至少能精确表示10位有效数字。通常,
double
为64位。
long double
(可能)表示更大的浮点数。它能表示比
double
更多的有效数字和更大的指数。
复数由两部分组成:实部和虚部。C99规定一个复数在内部用一个有两个元素的数组表示,第1个元素表示实部,第2个元素表示虚部。有3种复浮点数类型。
float _Complex
表示实部和虚部都是
float
类型的值。
double _Complex
表示实部虚部都是
double
类型的值。
long double _Complex
表示实部和虚部都是
long double
类型的值。
每种情况,前缀部分的类型都称为相应的实数类型(corresponding real type)。例如, double 是 double _Complex 相应的实数类型。
C99中,复数类型在独立环境中是可选的,这样的环境中不需要操作系统也可运行C程序。在C11中,复数类型在独立环境和主机环境都是可选的。
有3种虚数类型。它们在独立环境中和主机环境中(C程序在一种操作系统下运行的环境)都是可选的。虚数只有虚部。这3种类型如下。
float _Imaginary
表示虚部是
float
类型的值。
double _Imaginary
表示虚部是
double
类型的值。
long double _Imaginary
表示虚部是
long double
类型的值。
可以用实数和 I 值来初始化复数。 I 定义在 complex.h 头文件中,表示 i (即 -1 的平方根)。
#include <complex.h> // I定义在该头文件中
double _Complex z = 3.0; // 实部 = 3.0,虚部 = 0
double _Complex w = 4.0 * I; // 实部 = 0.0,虚部 = 4.0
double Complex u = 6.0 – 8.0 * I; //实部= 6.0,虚部 = -8.0
前面章节讨论过, complex.h 库包含一些返回复数实部和虚部的函数。