追学网

2.9 运算优先级、类型

UPDATE:2015/10/16 | 分类:C++语言视频教程


运算优先级、类型转换

【运算符优先级】

优先级 运算符 结合性
1 [ ]  ( )  .  –>    后置 ++   后置 ––  左→右
2 前置 ++   前置 ––   sizeof   &   *   +(正号)  –(负号) ~  !  右→左
3 (强制转换类型) 右→左
4 .*   ->* 左→右
5 *  /  % 左→右
6 +  – 左→右
7 << >> 左→右
8 < > <=  >= 左→右
9 ==  != 左→右
10 & 左→右
11 ^ 左→右
12 | 左→右
13 && 左→右
14 || 左→右
15 ? : 右→左
16 =  *=  /=  %= +=  –=  <<=  >>=&=  ^=  |= 右→左
17 , 左→右
 

【混合运算时数据类型的转换】

l  一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。
l  在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。
 
条件 转换
有一个操作数是long double型。 将另一个操作数转换为long double型。
前述条件不满足,并且有一个操作数是double型。 将另一个操作数转换为double型。
前述条件不满足,并且有一个操作数是float型。 将另一个操作数转换为float型。
前述条件不满足(两个操作数都不是浮点数)。 有一个操作数是unsigned long long型。 将另一个操作数转换为unsigned long long型。
有一个操作数是long long型,另一个操作数是unsigned long型 两个操作数都转换为unsigned long long型。
前述条件不满足,并且有一个操作数是unsigned long型。 将另一个操作数转换为unsigned long型。
前述条件不满足,并且有一个操作数是long型,另一个操作数是unsigned int型。 将两个操作数都转换为unsigned long型。
前述条件不满足,并且有一个操作数是long型。 将另一个操作数转换为long型。
前述条件不满足,并且有一个操作数是unsigned int型。 将另一个操作数转换为unsigned int型。
前述条件都不满足 将两个操作数都转换为int型。
 
l  将一个非布尔类型的算术值赋给布尔类型时,算术值为0则结果为false,否则结果为true。
l  将一个布尔值赋给非布尔类型时,布尔值为false则结果为0,布尔值为true则结果为1
l  将一个浮点数赋给整数类型时,结果值将只保留浮点数中的整数部分,小数部分将丢失。
l  将一个整数值赋给浮点类型时,小数部分记为0。如果整数所占的空间超过了浮点类型的容量,精度可能有损失。
 

【混合运算时数据类型的转换——显式转换】

l  显式类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。
l  语法形式
n  类型说明符(表达式)
n  (类型说明符)表达式
n  类型转换操作符<类型说明符>(表达式)
n  类型转换操作符可以是:
const_cast、dynamic_cast、reinterpret_cast、static_cast
l  例:int(z), (int)z, static_cast<int>(z)
三种完全等价
学习网

世界看中国 娱乐情感文化观点视频