c++自我学习.2
1.控制结构
选择结构
if if..else.. switch
循环结构
for while do while
其他结构
break
continue
技巧:
1.连续转离散
2.case循环
3.基于范围的for循环
for(int &v:vec)
v*=2;
每次迭代,对v的操作直接操作在vec上,vs=是vec的别名
2.格式化 操纵符
域宽 setw()
小数点个数 fixed+setprecision()
内容填充 cout.fill( )
显化小数点 showpoint
科学计数法 scientific
进制转化 dec 10 hex 16 oct 8
显化基数 showbase
对齐 left right
布尔转化 1 》true 0 》false
补充:
若不进行浮点数据精度格式化,只显示六位有效数字
cout.flags( )设置和重置格式状态
3.变量:
名字(标识符组成),类型,值,地址(指针),存储期,作用域
补:标识符
组成:英文小写字母,数字,下划线
规则:不能以数字开头,不能是关键字,严格区分大小写
补充:
小数点转二进制:
0.625*2=1.25取1
0.25*2=0.5取0
0.5*2=1取1
从上往下读101,前面再加个0,最后0.625转成二进制就是0.101
补码,反码
int a=13;
取反,获得反码
再+1得补码
补码就等于 - 13
IEEE规范
十进制带有小数点的数先转二进制,正负为第一部分存放在符号位,尾数为第二部分存放在尾数位,指数存放在指数位
例:120.5=1.205E+2
转成二进制数1110110.1=1.1101101E+6
1110110.1=1.1101101*E+6,画红的这部分直接存储到23位中
若不23位后面直接补0,补到23位为止,如1101101000000000000000000.....
底层:
0/1 + ???????? + 【】【】【】【】【】【】【】【】【】【】【】【】【】.......
浮点类型空间分配
float=1+8+23
double=1+11+52
1符号位
8指数位,阶码
00000000=-127,10000000=1,11111111=128,这里需要指数转为二进制码
23尾数位,按源码储存
精度
float 7位
double16位
布尔(bool)
布尔表达式:
结果只有true(真)和false(假)两个取值。
补:
逻辑操作符即结果为布尔类型的表达式,一般和关系运算符组成较复杂的表达式,其他类型也可以作为操作数,最终转化为bool类型
枚举类型
一个变量只有几个值,则可以定义为枚举类型(bool其实也是一个枚举类型,只有0和1。)
声明
enum Weekday{ sum=1 , mon=2 , tue=3 , wes=4 , thur , fri , sa }元素叫枚举常量
注意:
只能在声明的时候赋值,在后面使用中不能赋值
weekday x=sum
sum=1,错误
限定:class
enum class status : unsigned int { };
程序员还可以隐性的指定枚举类型的所隐含的整数类型,
MyEnum myEnum = MyEnum :: P2; 避免歧义
enum class Enum1{
P1 = 1,
P2 = 2
};
enum class Enum2{
P1 = 10,
P2 = 11
};
两个枚举,里面的元素名字一样,但是如果还是执行
Enum1 myEnum = P2 的话,会出现歧义
补充:
作用域内枚举不能直接通过cout输出,可以转化为int
cout << int( myEnum ) << endl;
4.函数调用堆栈:
栈:
在计算机系统中,栈被定义为一个特殊的容器,用户可以将数据压入栈中,也可以将已经压栈的数据出栈;压栈操作使得栈增大,出栈使得栈减小;栈总是自下增长的,栈顶由称为esp的寄存器进行定位,压栈操作使得栈顶的地址减小,出栈的操使栈顶地址增大
作用:
栈保存了一个函数调用所需要的维护信息,这常常被称为堆栈帧
堆栈帧的一般包括:
函数的返回地址和参数;
临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量;
保存的上下文:包括在函数调用前后需要保持不变的寄存器;
自动变量与堆栈结构:当被调函数返回调用者时,被调函数的自动变量应当被销毁,也就从堆栈结构中弹出
- 内联函数
函数定义处增加inline
原理:
省去调用的时空开销,直接在调用处嵌入函数体,需要拷贝代码
6.一元作用分辨运算符:
1.在同名的局部变量的作用域内可以访问同名全局变量
2.不能访问外层语句块中的同名局部变量