1. 程序编译流程
源代码→预处理器→编译器→汇编器→链接器→可执行代码
2. 数据类型
2.1 基本数据类型
类型 | 位 | 范围 |
---|---|---|
char | 1个字节 | -128到127或者0到255 |
unsigned char | 1 | 0~255 |
signed char | 4 | -128~127 |
int | 4 | -2147483648~2147483647 |
unsigned int | 4 | 0~4294967295 |
signed int | 4 | -2147483648~2147483647 |
short int | 2 | -32768~32767 |
unsigned short int | 2 | 0~65.535 |
long int | 8 | -32768~32767 |
signed long int | 8 | - |
unsigned long int | 8 | - |
float | 4 | - |
double | 8 | - |
long double | 8 | - |
二进制中的一位为一个比特(bit)
8个二进制构成的二进制串为一个字节(byte)
char、short、int、long的最高位是符号位,1表示负数,0表示非负数
2.2 运算符和表达式
赋值运算符:=、+=、-+、=、/=、%=、<<=、>>=、&=、^=、|=
算术运算符:+、-、、
关系运算符:==、!=、>、<、>=、<=
逻辑运算符:&&、||、!
**位运算符:
- &(按位与:同为1时为1,否则为0)
- |(按位或:只要有一个为1,则为1)
- ^(异或:不同为1,相同为0)
- ~(按位取反:0变1,1变0)
- <<(将二进制串左移若干位,高位舍弃,低位补0)
- “>>”(将二进制串右移若干位,低位舍弃,高位补0)
其他运算符:*(解引用)、&(取地址)、.(成员运算符)、->(成员运算符)、sizeof等
2.3 类型转换和溢出
当有不同类型的数据参与运算时,表达式的值的类型,以操作数中精度高的类型为准
自动转换:有些不同的数据类型之间是相容的,可以相互赋值,这叫做数据类型的自动转换,如字符型向整型的转换:int a = ‘a’;cout << a;//打印’a’a的ASCLL码,即97.
高精度数据类型向低精度数据类型强制转换会造正数据损失
溢出:数据进行加减乘等操作,导致中间部分或者最终结果超出结果类型所能表示的范围,就叫做溢出。溢出部分会被计算机丢弃,从而造成数据丢失或者程序出错
3 变量和常量
3.1 概念
变量是一个代称,在程序运行过程中系统会为数据分配可操作的存储区,变量就代表了那片内存空间,对变量的访问本质上就是对其内存空间的访问
常量是在程序运行过程中不会发生改变,而且一眼就能看出其值的量
特殊常量:字符常量,以’‘开头,如’\n’、'\r’等,成为转义字符
变量的声明、定义、初始化
- 变量声明需要出现在所有使用该变量的语句之前,用于向编译器告知该变量的类型和名称
- 变量定义告诉编译器该变量创建的位置以及该变量的类型,变量可以被多次声明,但只能在某个文件或函数中定义一次
- 变量初始化即为向变量指向的内存空间赋值
- 当需要在多个文件内使用且只在一个文件内定义一个变量时,往往使用extern关键字来声明该变量,并在某个文件内实现它
- 除了基本数据类型外,C++也允许自定义变量,如枚举,指针,数组,引用,结构体,类等
3.2 命名规则
变量必须以字母或者下划线开头,大小写敏感
常量可以用#define预处理指令,或者使用const关键字
3.3 标识符作用域
变量名、函数名、类型名统称为“标识符”。一个标识符能够起作用的范围,称为标识符的作用域。对于变量来说,在函数内部(包括形参)成为局部变量,在所有函数外面成为全局变量
static和extern
通过在定义时使用static关键字修饰,可以将全局变量或者局部变量定义为静态变量,静态变量数据存放于全局数据区,在程序运行过程中只初始化一次,且生命周期一直到程序结束
使用extern可以在其他文件内得到已被定义的变量或函数的引用,然而该变量或函数被static修饰后,只能作用于声明所在的文件,extern失效。
4 输入与输出
4.1 printf和scanf
int scanf(const char *format, …)函数从标准输入流stdin读取输入,并根据format来浏览输入
int printf(const char *format, …)函数把输出写入到标准输出流stdout,并根据format产生输出
4.2 cin和cout
C++使用流操作,主要头文件为,该头文件定义了cin、cout、cerr和clog对象,对应于标准输入流,标准输出流,非缓冲标准错误流,和缓冲标准错误流
cin、cout速度比scanf、printf慢,输入输出数据量大时用后者
cout和printf不建议混用
cout流的维护比printf要高一层,cout要到回车或流刷新时才会输出