c++的环境配置
选用Dvc++作为c++的环境
https://sourceforge.net/projects/orwelldevcpp/下载网址

第一个c++程序
创建项目
运行的项目类型
选定存储位置

cpp
#include <iostream>//包含的c++头文件
using namespace std;//使用的命名库
int main() {//主函数
cout<<"hello world"<<endl;//"hello world"是字符串
return 0;
}
#include<iostream>
是c++的常用头文件,和c语言不同,c++的新版头文件不加.h。
namespace是命名库,用于使用相同名字不同功能的函数调用。
cout在std命名库中是输出,会自动识别输出的类型,cout<<,符号不能用错,表示右边的数据通过<<给cout函数输出
endl在std命名库中是换行。
cin在std命名库中是输如,会自动识别输入的类型,sin>>,符号不能用错,表示左边的数据通过>>s输入给右边的变量。

运行时要进行编译
F9编译
F10运行
F11编译运行
数据类型
字符串,字,数。char(1)
整数,int(4),short(2),long(4or8(lp64)),ll(8)
小数float(4),double(8),long double(16)
Ture or False _bool(1)
sizeof操作符,类型长度
后面是变量命时()可省略
单位是字节1字节=8bit=4B,8个二进制位
signed有符号(正负)
unsigned无符号 可以储存最大整数值
符号大小
char:1字节,取值范围为-128到127(有符号)或0到255(无符号)
short:2字节,取值范围为-32,768到32,767(有符号)或0到65,535(无符号)
int:4字节,取值范围为-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号)+-21亿
long:8字节,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号)或0到18,446,744,073,709,551,615(无符号)
long long:8字节,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号)或0到18,446,744,073,709,551,615(无符号)
float:4字节,取值范围约为±3.4E+38,精度为6-7位有效数字
double:8字节,取值范围约为±1.7E+308,精度为15-16位有效数字
long double:16字节,取值范围约为±1.1E+4932,精度为19位有效数字
基本和c语言一样
char存储时也可以用ASCII码值来表示。如A是65.

可以使用sizeof获得类型的长度。
float是4字节输出为4.
cpp
#include <iostream>
using namespace std;
int main() {
int n;
n=sizeof(float);
cout<< n <<endl;
return 0;
}
signed 与unsigned
有符号会多一位符号位占用,所以比无符号的上线小一半。
你的输入的负数存储的无符号中会是把符号位算进去
cpp
#include <iostream>
using namespace std;
int main() {
unsigned int n;
n=-1;
cout<< n <<endl;
return 0;
}

typedef可以给类型重命名
cpp
#include <iostream>
using namespace std;
typedef unsigned int uint;
int main() {
uint n;
n=-1;
cout<< n <<endl;
return 0;
}

变量
int i;//由int变量类型和i变量名组成。变量名由字母(Az),数字(13),下划线(_)
在创建变量时给予值的叫初始化,后面的是赋值,
分为全局和局部,
全局所以的函数使用同一个变量,局部变量在函数内定义使用,当全局变量和局部变量名相同时先使用局部变量,如果想使用全局变量加::
cpp
#include <iostream>
using namespace std;
typedef unsigned int uint;
int a=0;//全局变量a
int n=0;//全局变量n
void jia(){
a++;//改变全局变量
int b=0;//局部变量b
b++;//改变局部变量
int n=0;//局部变量n
::n++;//改变全局变量
}
int main() {
int b;
jia();
cout<< a <<endl;
cout<< b <<endl;
cout<< n <<endl;
return 0;
}

常量
不可修改的数
如整型4,浮点型3.14。字符'a'
#define M(常量名)n(常量值)
常量不可修改。
算数操作符
了解整数的储存
整数的2进制表示有原码,反码,补码。
补码是目前计算机中广泛采用的编码方式,统一了加减运算,消除了零的冗余,提高了运算效率。
有符号的整数由符号位和数值位组成。2进制最高位为符号位0表示正,1表示负。
正整数的三码相同。负整数个不相同。
进行加法计算时用补码计算
原码取反(符号位不取反)得反码再加1得补码。
补码先取反再加1得原码。或先减1再取反。
移位操作符<<,>>.
只能用于整数移动的位数只能是正整数且在合理范围内
<<左移操作符
左边丢掉,右边补零,有乘2的作用
>>右移操作符,
分为算数位移(一般用):左边用符号位补充,右边丢弃。
逻辑位移(大多编译器不用):左边补零,右边丢掉。
a<<=1(a=a<<1);
位操作符&,|,^,~。操作的是2进制位.
&与有0为0。特殊算法n&(n-1)去掉最末尾的1。
|或有1为1。
^异或相同为0;相异为1
可用来无临时变量交换。
~按位取反。
计算有多少个1
判断是否为2的次方数简化
修改特定的i位数为1
n|=(1<<i-1)
为0
n&=(~(1<<i-1))
逗号表达式
ex1,ex2,ex3.
最后的结果是表达式的结果,从左往右计算。如下
下标访问[]。双目
索引数组的值,一个数组名+一个索引值
函数调用(),接受一个或多个,至少一个
包括函数名和括号里的内容。
结构成员访问操作符
结构体中(.),->
结构体是为了描述复杂的对象如学生,可以包含多个属性
如何创建,关键字struct
使用例子,结构体.类型名。直接访问。
操作符的优先级
最高优先级: 2 一元操作符:
1圆括号():可用于强制改变计算顺序 2自增/自减++、--
1成员访问、数组下标等 2逻辑非!、按位取反~
2一元正负号+、-
3算术操作符:
3.1乘法*、除法/、模% 3.2加法+、减法-
4比较操作符:
大小比较<、>、<=、>= 等值比较==、!=
5位操作符:
位移<<、>> 位与&、位异或^、位或|
6逻辑操作符:
逻辑与&& 逻辑或||
7赋值操作符:
=、+=、-=等复合赋值操作符
最低优先级:
逗号运算符
当优先级相同时看结合性
如前缀++是从右向左。
参考:c语言运算符优先级顺序表
https://config.net.cn/tools/precedence-and-associativity-rules-for-operators-in-c.html
表达式求值
整型提升
存储小于int,有符号的按符号位来提升
无符号提升,高位补0;
算数转换
小的类型转换为大的类型。如int+float。
先将int里的值转为float类型
强制类型转换
(强制的类型)变量名。
应用:
cpp
#include <iostream>
using namespace std;
int main() {
long long b;
double a;
cin>>a;
b=(long long)a;
cout<< b <<endl;
return 0;
}
输入时舍弃小数部分
问题表达式
1,顺序不为一时有风险如a*b+b*c+c*d乘加不相邻有歧义。
2 c+c--=;先算--时会小2,后算会小1。
数值溢出会剔除最高位。char是8位超过8位会删除最高位循环。
输入输出、
getchar和putchar
int getchar(void)
返回输入的字符的ASCII;
int putchar()不会忽略空格,如果读取失败返回EOF(-1)输入Ctrl+z返回错误。
#include<cstdio>;包含c语言的头文件
scanf和printf。
C语言中的函数,在c++中可以包含相应的头文件使用。
scanf和printf要了解占位符
占位符
%d:有符号十进制整数(int类型)
%u:无符号十进制整数(unsigned int类型)
%o:无符号八进制整数
%x / %X:无符号十六进制整数,%x使用小写字母,%X使用大写字母456。
%ld / %lu:长整型(long类型)
%lld / %llu:长长整型(long long类型)
浮点类型
%f:单精度或双精度浮点数
%e / %E:科学计数法表示浮点数,%e使用小写字母,%E使用大写字母
%g / %G:自动选择%f或%e格式,以最简洁的方式表示浮点数
字符和字符串类型
%c:单个字符(char类型)
%s:字符串(char*类型)
其他类型
%p:指针类型,以十六进制形式输出指针地址
%n:不输出内容,而是将当前已输出的字符数写入对应变量(需指针类型)
%%:输出一个百分号%
sizeof的返回值是size_t用%zu
printf()参数,比占位符多一
scanf函数输入的值是放在一个地址,&取址符
scanf_s函数不等于scanf函数
count和cin
cout在std命名库中是输出,会自动识别输出的类型,cout<<,符号不能用错,表示右边的数据通过<<给cout函数输出
多组输出cout<< a << b <<endl;
cin在std命名库中是输如,会自动识别输入的类型,cin>>,符号不能用错,表示左边的数据通过>>输入给右边的变量。
多组输入cin >> a >> b ;
c++补充
条件判断,数组,string,函数与递归,结构体和类。