c语言程序设计现代方法笔记--第七章 基本类型

54 阅读4分钟

7.1 整数类型

7.1.1 C99中的整数类型

C99提供了两个额外的标准整数类型:long long int和unsigned long long int。

C99中把short int、int、long int和long long int类型(以及signed char类型)称为标准有符号整型,而把unsigned short int、unsigned int、unsigned long int和unsigned long long int类型(以及unsigned char类型和_Bool类型)称为标准无符号整型。

7.1.2 整数常量

7.1.3 C99中的整数常量

在C99中,以LL或ll(两个字母大小写要一致)结尾的整数常量是long long int型的。如果在LL或ll的前面或后面增加字母U(或u),则该整数常量为unsigned long long int型。

7.1.4 整数溢出

有符号整数运算中发生溢出时,程序的行为是未定义的。

无符号整数运算过程中发生溢出时,结果是有定义的:正确答案对2的n次幂取模,其中n是用于存储结果的位数。例如,如果对无符号的16位数65535加1,其结果可以保证为0。

7.2 浮点类型

在C99中,浮点类型分为两种:一种是实浮点类型,包括float、double和long double类型;另一种是C99新增的复数类型(包括float _Complex、double _Complex和long double _Complex)。

7.2.2 读/写浮点数

读取double类型的值时,在e、f或g前放置字母l;

读写long double类型的值时,在e、f或g前放置字母L;

7.3 字符类型

由于字符和整数之间有密切关系,C89采用术语整值类型(integral type)来(统称)包含整数类型和字符类型。枚举类型也属于整值类型。

C99不使用术语“整值类型”,而是扩展了整数类型的含义使其包含字符类型和枚举类型。C99中的_Bool型是无符号整数类型。

7.3.3 算术类型

整数类型和浮点类型统称为算术类型。下面对C89中的算术类型进行了总结分类:

  • 整值类型:
    • 字符数型(char);
    • 有符号整型(signed char、short int、int、long int);
    • 无符号整型(unsigned char、unsigned short int、unsigned int、unsigned long int);
    • 枚举类型。
  • 浮点类型(float、double、long double)。

C99的算术类型具有更复杂的层次:

  • 整数类型:
    • 字符类型(char);
    • 有符号整型, 包括标准的(signed char、short int、int、long int、long long int)和扩展的;
    • 无符号整型,包括标准的(unsigned char、unsigned short int、unsigned int、unsigned long int、unsigned long long int、_Bool)和扩展的;
    • 枚举类型。
  • 浮点类型:
    • 实数浮点类型(float、double、long double);
    • 复数类型(float_Complex、double_Complex、long double_Complex)。

7.3.4 转义序列

转义序列共有两种:字符转义序列(character escape)和数字转义序列(numeric escape)。

字符转义序列使用起来很容易,但是它们有一个问题:转义序列列表没有包含所有无法打印的ASCII字符,只包含了最常用的字符。

字符转义序列也无法用于表示基本的128个ASCII字符以外的字符。数字转义序列可以表示任何字符,所以它可以解决上述问题。

1.jpg

7.3.4.1 数字转义序列

为了把特殊字符书写成数字转义序列,首先需要在类似附录E那样的表中查找字符的八进制或十六进制值。

八进制转义序列:由字符\和跟随其后的一个最多含有三位数字的八进制数组成。(此数必须表示为无符号字符,所以最大值通常是八进制的377。)例如,可以将转义字符写成\33或\033。跟八进制常量不同,转义序列中的八进制数不一定要用0开头。

十六进制转义序列:由\x和跟随其后的一个十六进制数组成。虽然标准C对于十六进制数的位数没有限制,但其必须表示成无符号字符(因此,如果字符长度是8位,那么十六进制数的值不能超过FF)。若采用这种表示法,可以把转义字符写成\x1b或\x1B的形式。字符x必须小写,但是十六进制的数字(例如b)不限大小写。

7.3.5 字符处理函数

#include <stdio.h>
#include <ctype.h>

int main(){
	int i = 'a';
	i = toupper(i);
	printf("%c\n",i);
}

7.3.6 用scanf和printf读/写字符

7.3.7 用getchar和putchar读/写字符

getchar函数返回的是一个int类型的值而不是char类型的值

7.4 类型转换

7.5 类型定义

typedef int Bool;

注意,所定义的类型的名字放在最后。