c++ primer 第四章 - 表达式

1 优先级与结合律:

 优先级:从高到低

算术运算符:
满足左结合律;就是说运算符的优先级相同,将按照从左到右的顺序结合运算对象;

关系运算符
左结合律,就是从左到右计算
&&    :先左再右,(但且仅当左侧运算对象无法确定表达式的结果时,才会计算右侧运算对象的值,短路求值)
||   :同上
赋值运算:
右结合律:从右往左计算;
返回值 : 返回其左侧运算对象
逗号运算符:
含有多个运算对象,从左到右求值

c++ primer 第四章 - 表达式
   c++ primer 第四章 - 表达式




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)为正数

c++ primer 第四章 - 表达式


3 i++ ++i

c++ primer 第四章 - 表达式


4 条件运算:

cond ? expr1 : expr2;

例:string finalgrade = (grade < 60) ? "fail" : "pass";


5 位运算符:

c++ primer 第四章 - 表达式


位运算符 最好使用无符号类型:

c++ primer 第四章 - 表达式

逻辑与、逻辑或、条件运算符、逗号运算符 规定了运算对象的求值顺序:

逗号:先左后右,返回最右侧表达式的值;


6 类型转换:

            原则:整数提升、

c++ 中,某些类型之间是关联的。

两种类型可以相互转换,说明这两种类型是关联的


6.1 隐式转换:

c++ primer 第四章 - 表达式

6.2 算术转换:

无符号、有符号转换:
      二者都是有符号的、或者都是无符号的,按照整数提升原则,将大小变为较大者即可;
      无符号类型 >= 有符号类型:有符号变为无符号
      无符号类型 <= 有符号类型:依赖于机器;


c++ primer 第四章 - 表达式

6.3 显示转换(慎用)

cast-name <type> (expression);
cast-name:是static_cast、dunamic_cast、const_cast、reinteret_cast 中的一种,表示转换方法;
type:表示转换的目标类型;
expression: 表示要转换的值;