c++ primer 第四章 - 表达式
1 优先级与结合律:
优先级:从高到低
算术运算符:
满足左结合律;就是说运算符的优先级相同,将按照从左到右的顺序结合运算对象;
关系运算符:
左结合律,就是从左到右计算
&& :先左再右,(但且仅当左侧运算对象无法确定表达式的结果时,才会计算右侧运算对象的值,短路求值)|| :同上
赋值运算:
逗号运算符:右结合律:从右往左计算;返回值 : 返回其左侧运算对象
含有多个运算对象,从左到右求值;
2 算术运算符 / %
(M/N)*N+(M%N)=M
m/(-n) = - (m/n) //是一个负数,(m/(-n))*(-n) 是正数,这个正数不到m,要想满足 (M/N)*N+(M%N)=M; m%(-n) 一定要是正数;
同理:(-m)/n 是负数 、负数乘以正数是负数;(-m)%n为负数
m/(-n)是负数、负数乘以负数是正数; m%(-n)为正数
3 i++ ++i
4 条件运算:
cond ? expr1 : expr2;
例:string finalgrade = (grade < 60) ? "fail" : "pass";
5 位运算符:
位运算符 最好使用无符号类型:
逻辑与、逻辑或、条件运算符、逗号运算符 规定了运算对象的求值顺序:
逗号:先左后右,返回最右侧表达式的值;
6 类型转换:
原则:整数提升、
c++ 中,某些类型之间是关联的。
两种类型可以相互转换,说明这两种类型是关联的
6.1 隐式转换:
6.2 算术转换:
无符号、有符号转换:二者都是有符号的、或者都是无符号的,按照整数提升原则,将大小变为较大者即可;无符号类型 >= 有符号类型:有符号变为无符号无符号类型 <= 有符号类型:依赖于机器;
6.3 显示转换(慎用)
cast-name <type> (expression);cast-name:是static_cast、dunamic_cast、const_cast、reinteret_cast 中的一种,表示转换方法;type:表示转换的目标类型;expression: 表示要转换的值;