目录
一、输入输出 (iostream库)
1.标准输出流cout
2.标准输入流cin
3.标准库iostream
(1)iostream中的窄字符(char)
(2)iostream中的 宽字符(wchar_t)
二、变量与数据类型
1.变量
(1)概念:
(2)变量的声明和初始化:
(3)在变量声明和初始化的过程中需要注意的事项:
2.数据类型
(1)数据类型的分类:
(2)基本数据类型之间的运算规则:
3.进制与进制之间的转化
三、标识符
1.标识符的命名规则:(必须要遵守,否则编译不能通过)
2.c++中的关键字:
四、基本数据类型
1.整型:
2.浮点型:
3.字符型:
4.布尔型boolean——只能取两个值:true,false
五、C++ 运算符
1.算术运算符
2.关系运算符
3.逻辑运算符
4.位运算符
5.其它
一、输入输出 (iostream库)
C++中的输入输出,主要包括标准输出流cout、标准输入流cin和标准库iostream。
1.标准输出流cout
cout输出流需要搭配<<输出操作符来使用,如输出语句:
#include <iostream>using namespace std;int main()
{cout << "Hello World" ;return 0;
}
输出结果:
Hello World
这里简单解释一下 <using namespace std; >,C++标准程序库中的所有标识符都被定义于一个名为std的namespace中,也就是我们的 cout 标识符被定义在 std。<using namespace std; >用于告诉编译器在当前程序中使用标准命名空间(std)中的所有标识符,这样在程序中就可以直接使用cout、cin、endl等标准库中的函数和对象,而不必使用完整的限定名来表示。我们也可以像下面一样写Hello World程序:
#include <iostream>int main()
{std::cout << "Hello World" ;// 使用完整的限定名来表示return 0;
}
输出结果:
Hello World
本质上,是将字符串"Hello"插入到cout对象里,并以cout对象作为返回值返回,因此你还可以用<<在后面连续输出多个内容,如:
#include <iostream>using namespace std;int main()
{cout << "Hello " <<"zgl " << "这是你第一个C++程序";return 0;
}
输出结果:
Hello zgl 这是你第一个C++程序
提到cout,最常用到的还有endl操纵符,可以直接将它插入到cout里,起输出换行的效果,如:
#include <iostream>using namespace std;int main()
{cout << "Hello " << endl <<"zgl " << endl << "这是你第一个C++程序";return 0;
}
输出结果:
Hello
zgl
这是你第一个C++程序
2.标准输入流cin
接收一个数据之前,都要先定义一个与之类型一致的变量,用来存放这个数据,然后利用cin搭配>>输入操作符,来接收用户从键盘的输入,如代码:
#include <iostream>using namespace std;int main()
{int a;cin >> a;cout << "get num:" << a << endl;return 0;
}
输出结果如下:
3.标准库iostream
iostream的意思是输入输出流,直接点说就是in(输入) out(输出) stream(流),取in、out的首字母与stream合成。输入和输出是数据传送的过程,数据如流水一样从一处流向另一处。C++形象地将此过程称为流(Stream)。
iostream(.h)库声明的对象分为两组:窄字符(char)、宽字符(wchar_t)。
(1)iostream中的窄字符(char)
主要包含下面对象 :
- cin:标准输入流
- cout:标准输出流
- cerr:错误的标准输出流
- clog:用于记录的标准输出流
(2)iostream中的 宽字符(wchar_t)
主要包含下面对象 :
- wcin:标准输入流(宽)
- wcout:标准输出流(宽)
- wcerr:错误的标准输出流(面向广角)
- wclog:用于记录的标准输出流(宽)
iostream中的窄字符(char)与 宽字符(wchar_t)的差异:
1)char 的大小只有 1 个字节,而 wchar_t 的大小则是平台相关的,通常为 2 或 4 个字节,可以用于编码更多的字符(如中文字)。
2)char 使用的是默认字符集(如 ASCII),而 wchar_t 使用的是宽字符集(如 UTF-16 或 UTF-32 等)。
3)对于字符串的处理方式不同,char 类型的字符串使用字符数组(char[]) 来存储,而 wchar_t 类型的字符串则使用宽字符数组(wchar_t[])来存储。
二、变量与数据类型
1.变量
(1)概念:
- 内存中的一个存储区域,该区域的数据可以在同一范围内不断变化
- 变量的构成包涵三个要素:数据类型、变量名、存储的值
- c++定义变量的格式:数据类型 变量名 =(赋值符号) 变量值;
int a = 5;
//数据类型:int
//变量名:a
//"=":表示赋值符号
//"5":变量值
(2)变量的声明和初始化:
声明变量是指在程序中指定变量的数据类型和名称,而初始化变量是指在声明变量的同时将其赋予一个初始值。
int main()
{int a;//声明一个int型变量aa = 15;//将a的值初始化为15;int b = 20;//声明一个int型变量b并且将其初始化为20return 0;
}
在c++中还可以同时声明并初始化多个变量
声明多个变量:
int a,b,c;
声明并初始化多个变量:
int a = 1,b = 8,c = 9;
(3)在变量声明和初始化的过程中需要注意的事项:
- 定义变量时,变量名要遵循标识符命名的规则和规范
- 变量必须先声明,后使用。
- 变量都定义在其作用域内。在作用域内,他是有效的。
- 在同一个作用域内,不可以声明两个同名的变量。
- 定义好变量后,就可以通过变量名的方式对变量进行调用和运算
- 变量值在赋值时,必须满足变量的数据类型,并且在数据类型有效的范围内变化
2.数据类型
(1)数据类型的分类:
C++的数据类型分为基本数据类型和非基本数据类型,在这里主要介绍基本数据类型。
(2)基本数据类型之间的运算规则:
在这里我们讨论的除布尔类型以外的七种基本数据类型变量间的运算
- 自动类型提升:(容量大小是指表示数的范围的大小)
- 当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大的数据型。
此时的容量大小并非指所占的内存空间的大小,而是指表示数据范围的大小:
short--> int--> long--> float--> double
short/char-->int--> long--> float--> double(当short/char类型的变量做运算时,结果为int)
- 强制类型转换:自动类型提升运算的逆运算。
- (需要将容量大的变量的类型转换转换为容量小的类型转换时使用强制类型转换)
- 1.需要使用强转符()
- 2.注意:强制类型转换过程中,可能导致精度损失
整型常量默认类型为int型
浮点型常量默认类型为double型
3.进制与进制之间的转化
所有数字在计算机底层都以二进制形式存在
计算机世界中只有二进制,所有计算机中存储和运算的所有数据都要转为二进制。包括数字、字符、图片、声音、视频等。
- 二进制的由来:由德国数理哲学家莱布尼茨于1679年发明
- 二进制:0,1——满二进一 ——以0b或0B开头
- 八进制:0~7——满八进一 ——以0开头(较少使用)
- 十进制:0~9——满十进一
- 十六进制:0~9以及A~F——满十六进一 ——以0x或0X开头表示
二进制转化成十进制:
计算机底层都以补码的方式存储数据。
符号位:0;——+14(原码=补码=反码)
符号位:1;—— -14
原码:(把十进制转为二进制,然后最高位设置为1)
反码:(在原码的基础上,最高位不变,其余位取反<0变1,1变0>)
补码:(反码+1)
- 十进制转换成二进制:除二取余的逆;
- 二进制转化成八进制:8 = 2^3;每三个算一位
- 二进制转化成十六进制:16=2^4;每四个算一位
三、标识符
1.标识符的命名规则:(必须要遵守,否则编译不能通过)
- 由26个英文字母大小写,0-9,_(下划线)组成。
- 数字不可以开头。
- c++中是大小是不一样的,长度无限制
- 不可以使用关键字
- 不能用连续两个下划线开头,也不能以下划线加大写字母开头,这些被C++保留给标准库使用
- 函数体外的标识符,不能以下划线开头。
- 尽量有实际意义
- 变量名一般用小写字母
- 自定义类名一般以大写字母开头
- 如果包涵多个单词,一般使用下划线分隔,或者将后面的单词首字母大写
2.c++中的关键字:
四、基本数据类型
1.整型:
- short(2字节=16bit)(-2^15~2^15-1)
- int (4字节=32bit)(常用)(-2^31~2^31-1)(约21亿)
- ong (4字节=32bit)(-2^31~2^31-1)
- long long (8字节 = 64bit) (-2^63~2^63-1)
字节(byte):是计算机用于计量存储容量的基本单位,一个字节等于8bit;
位(bit):是数据存储的最小单位。二进制数系统中,每个0或者1就是一个位,叫做bit(比特),其中8bit就称为一个字节
转换关系:
- 8 bit = 1Byte
- 1024 Byte = 1 KB
- 1024 KB = 1 MB
- 1024 MB = 1 GB
- 1024 GB = 1 TB
2.浮点型:
- float(单精度)(4字节)
- 表示数的范围大于long型(声明float型变量必须要以“f”或者“F”结尾)
- double(双精度)(8字节)
- long double(长双精度) (8字节)
3.字符型:
char(1字符=2字节)
字符型变量的三种表现方式:
- 使用一对( '')括起来的单个字符,内部只能写一个字符。
- 直接使用unicode值来表示字符型常量:'\uXXXX'——unicode编码集;故一个字符可以存储一个字母,一个汉字,或者其他书面的一个字符
- 使用转义字符'\'来将其后的字符转变为特殊字符型常量——‘\n’--换行符 '\t'--制表符
- 字符集:ASCII码(a--97、A--65、0--48)、UTF-8
4.布尔型boolean——只能取两个值:true,false
常使用在流程控制语句中。比如,条件判断、循环结构等
我们不谈boolean类型所占的空间大小。但是真正在内存中分配的话,使用的是4个字节
五、C++ 运算符
C++的基础运算符和C类似,比如:算术运算符、关系运算符、逻辑运算符、位运算符。
1.算术运算符
C++ 的算术运算符用于处理基本的数学运算。主要包括:加、减、乘、除、取余、自增、自减。
需要注意的是:
除法运算符 /,如果操作数都是整数,那么结果也是整数,小数部分会被舍去。如果想得到浮点数的结果,可以将操作数转为 float 或 double 类型。
取模运算符 % 只适用于整数操作数。如果你需要对浮点数进行类似操作,可以使用函数 fmod()(需引入 <cmath> 头文件)。
在使用这些算术运算符时,请确保操作数遵循相应的数据类型规则,并避免因操作数类型不当导致的错误。同时,在进行数学运算时要注意防止溢出。
2.关系运算符
C++ 的关系运算符用于比较两个操作数之间的关系。关系运算符在条件判断中非常常用,通常用于控制结构(如 if、while)中的表达式。主要包括:等于、不等于、大于、小于、大于等于、小于等于。
需要注意的是:
在使用关系运算符时,请确保操作数具有可比较的类型。同时注意,如果操作数是浮点数,可能会因浮点数精度问题导致比较结果不如预期。通常建议对浮点数的比较使用误差范围,而非直接进行关系运算。
3.逻辑运算符
C++ 的逻辑运算符用于连接或改变多个布尔表达式的值。逻辑运算符在控制结构(如 if、while)中的条件判断语句中广泛使用。主要包括:与、或、非。
需要注意的是:
在使用逻辑运算符时,C++ 采用短路求值策略,即只在需要时执行后续的布尔表达式。例如,对于逻辑与运算 &&,如果第一个表达式为 false,则整个表达式必定为 false,无需计算第二个表达式。这种优化策略有助于提高效率,但可能导致一些副作用被跳过。因此,谨慎考虑布尔表达式间的顺序与副作用。
4.位运算符
C++ 的位运算符用于操作整数类型数据的二进制位。位运算符处理的对象是整数在内存中的位表示。主要包括:位与、位或、按位取反、异或、左移、右移。
需要注意的是:
位运算符仅适用于整数类型(如 int、long、char 等)。在进行位运算时,需要确保操作数遵循相应的数据类型规则。同时,当在 unsigned 类型上执行位移运算时,请特别注意不要引入符号扩展。在使用有符号整数时,注意有符号整数的位移运算符可能会导致未定义的行为。
5.其它
当然还有一些其它的运算符,比如:赋值、逗号、下标、取地址、解引用,这些后续再总结。