1.基本数据类型

1.1整数

1.1.1 int类型

有符号整型,int的值是整数,注意int的取值范围(ISO C规定最小为-32768~32767)

声明:int 变量名;

打印十进制用转换说明%d

1.1.2 其他整数类型

  • short int 类型:节省空间
  • long int 或long:适用于较大数值,long是有符号类型
  • long long int或long long :是有符号类型,至少占64位
  • unsigned int或unsigned:只用于非负值
  • 在 C90 标准中,添加了unsigned long int或unsigned long和unsigned int 或unsigned short 类型。C99标准又添加了unsigned long long int或unsigned long long。
  • 在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。例如,short、short int、signed short、signed short int 都表示同一种类型。

1.1.3 char类型

用于储存字符,技术层面看char是整数类型,因为其用特定的整数表示特定的字符(计算机用数字编码处理字符)

声明:char 变量名

char 数组可以用于存储字符串,字符串是以空字符 ‘\0’ 结尾的字符序列:char 数组名[],[]中可以填长度

  • 用单引号括起来的单个字符被称为字符常量,可以是字符、数字和标点符号
  • 用双引号括起来编译器认为是字符串

1.1.4* 非打印字符

一些代表行为的字符,有以下方法打印:

  1. 使用ASCII码

  2. 使用转义序列

    注意把转义序列赋给字符变量时,要用单引号把转义序列括起来,而无论是普通字符还是转义序列,只要是双引号括起来的字符集合,就无需用单引号括起来

1.1.5 _Bool类型

布尔值,即true和false,C语言用1表示true,2表示false

1.1.6 可移植类型stdint.h和inttypes.h

  • 精确宽度整数类型:C创建的新类型名定义在stdint.h头文件中,例如int32_t(32位有符号整数)、uint16_t(16位无符号整数)这些属于精确宽度整数类型,其具有明确的位数,在不同平台上能提高代码的可移植性

  • 最小宽度类型:int_leastN_t和uint_leastN_T系列类型(其中N可以是8/16/32/64,能保证至少具有指定的位数,当需要确保整数类型至少具有一定的位数可以使用,在不同的系统中会选择一种能够满足最小宽度要求的整数类型实现

1.2 浮点数

1.2.1 float、double、long double

float类型必须至少能精确表示6位有效数字,且取值范围至少是10e-37~10e37;

通常系统储存一个浮点数要32位,其中8位用于表示指数的值和符号,剩下24位用于表示非指数部分(尾数或有效数)及其符号

double至少必须能精确表示10位有效数字

  • 对于浮点型常量,编译器默认是double类型的精度,在浮点数后面加上f或F后缀可让编译器将浮点型看做float类型,使用l或L后缀似的其成为long double类型
  • NaN是一个特殊的浮点值(not a number),其与任何值比较逗返回false,不可用==判断,C99标准中可以用isnan函数来判断一个浮点数是否为NaN

1.2.2 上溢

数值超过该类型所能表示的最大上限时,就会发生上溢;对于浮点数类型,当一个数值变得非常大以至于超出了浮点数的表示范围时,也会发生上溢,通常结果会变为特殊的无穷大值(infinity)表示。

1.3 复数和虚数

复数类型:float_Complex、double_Complex和long double_Complex

虚数类型:是float_Imaginary、double_Imaginary和long double_Imaginary

如果有complex.h头文件,可以用complex代替_Complex,用imaginary代替_Imaginary,还可以用I代替-1的平方根