1、以下是 C+程式语言中的所有运算子的优先级和结合性列表。优先级 运算子 叙述 示例 重载性 结合性1 : 作用域解析(C+专有) Class:age = 2; 否+ 后缀递增 i+- 后缀递减 i- 组合 i+;a*=i;() 函数调用或变量初始化 c_tor(int x, int y) : _x(x), _y(y * 10) 数组访问 array4 = 2;. 以对象方式访问成员 obj.age = 34; 否- 以指针方式访问成员 ptr-age = 34;dynamic_cast 运行时检查类型转换(C+专有) Y 否static_cast 未经检查的类型转换(C+专有) Y 否rein
2、terpret_cast 重定义类型转换(C+专有) int const* p = reinterpret_cast(0x1234); 否const_cast 更改非常量属性(C+专有) int* q = const_cast(p); 否2typeid 获取类型信息(C+专有) std:type_info const 否由左至右+ 前缀递增 +i- 前缀递减 -i+ 一元正号 int i = +1;- 一元负号 int i = -1;!not逻辑非!的备用拼写 if (!done) compl按位取反的备用拼写 flag1 = flag2;(type) 强制类型转换 int i = (int)
3、floatNum;* 引用 int data = *intPtr;sizeof 某某的大小 size_t s = sizeof(int); 否new 动态内存分配(C+专有) long* pVar = new long;new 动态数组内存分配(C+专有) long* array = new long20;delete 动态内存释放(C+专有) delete pVar;3delete 动态数组内存释放(C+专有) delete array;由右至左.* 成员对象选择(C+专有) obj.*var = 24; 否4-* 成员指针选择(C+专有) ptr-*var = 24;* 乘法 int i
4、= 2 * 4;/ 除法 float f = 10.0 / 3.0;5% 模数(取余) int rem = 4 % 3;+ 加法 int i = 2 + 3;6- 减法 int i = 5 - 1; 位元右移 int flags = 33 1;小于关系 if (i 大于关系 if (i 42) 由左至右= 大于等于关系 if (i = 42) .=eq等于关系=的备用拼写 if (i = 42) .9!=not_eq不等于关系!=的备用拼写 if (i != 42) 10 11 xor 位元 XOR(独占 or)的备用拼写 flag1 = flag2 42;12 |bitor 位元 OR(包含
5、 or)|的备用拼写 flag1 = flag2 | 42;13 否= 直接赋值 int a = b;+= 以和赋值 a += 3;-= 以差赋值 b -= 4;*= 以乘赋值 a *= 5;/= 以除赋值 a /= 2;%= 以取余数赋值 a %= 3;= 以位元右移赋值 flags = 2;=xor_eq以位元 XOR 赋值=的备用拼写 flags = new_flags;16|=or_eq以位元 OR 赋值|=的备用拼写 flags |= new_flags;由右至左17 throw 抛出异常 throw EClass(“Message”); 否18 , 循环评估运算 for (i =
6、0, j = 0; i (大于)=(大于等于)=(等于)!=(不等于)。其中前 4 种和后 2 种属于不同的优先级,前 4 种的优先级高于后 2 种。由关系运算符和操作运算符组成的表达式为关系表达式,关系表达式的结果为布尔类型。3. 逻辑运算符及逻辑表达式:逻辑运算符共有 3 个:1 个单目运算符“!”,2 个双目运算符“&”(逻辑与)和“|”(逻辑或)。其中逻辑与的优先级比逻辑或高。逻辑运算的结果是逻辑值。参与逻辑运算的操作数可以是任一基本类型的数据,在进行判断时,系统将非零值作为真,零为假。对于单目运算符“!”(逻辑求反),若其操作数为 false(0),运算结果为 true(1),否则为
7、 false(0)。例如,!5 的结果为 0.对于“&”(逻辑与)运算符,只要两个操作数中有一个为 false(0),运算结果就为false(0),否则 true(1).例如,2&5 的结果为 1.对于“|”(逻辑或)运算符,只要两个操作数中有一个为 true(1),运算结果就为true(1),否则为 false(0)。例如,5|0 的结果为 1.由逻辑预算副和操作数构成的表达式为逻辑表达式,逻辑表达式的结果为布尔类型。注意:当多个“|”(逻辑或)运算符,只要两个操作数中有一个为 true(1),运算结果就为 true(1),否则则为 false(0),停止后续计算,例如:a=0,b=2,c=
8、3;表达式a+|b+|c+运算后,整个表达式值为 true(1),a 的值为 1,b 的值为 2,c 的值为 3.4. 赋值运算符和赋值表达式:c+中的赋值运算符分两种:简单赋值运算和复合赋值运算符。赋值运算符都是二元运算符,右结合。由赋值运算符和操作数组成的表达式称为赋值表达式。(1)简单赋值运算符c+中的简单赋值运算符为“=”。其表达式的一般形式为:变量=表达式该表达式执行时,先计算赋值运算符右部“表达式”的值,然后将它赋给左边的变量。赋值表达式的值为左边变量的值,其类型为左边变量的类型。(2) 复合赋值运算符:复合赋值运算符由一个基本赋值运算符和其他一些运算符复合构成,共有 10 个,分
9、别为:+=,-=,*=,/=,%=,=,&=,=,|=.如果以“op”表示某种运算符,则复合赋值表达式的一般形式为:变量 op=表达式等价于:变量=变量 op 表达式即先用左部变量和右部表达式作数值运算,然后将运算结果送给左部变量。例如:a+=3 等价于 a=a+3使用复合赋值运算符不仅书写简练,而且经过编译以后生成的代码少。5. 位运算符:c+提供了 6 个位运算符:(按位求反),&(按位与),|(按位或),(按位异或),(右移位),其中按位求反是单目运算符,其余都是双目运算符。位运算符是对其操作数按二进制形式逐位进行运算,参与运算的操作数都应为整型数,不能是实型数。(1)(按位求反):其作
10、用是对一个二进制数的每一位求反,即 01,10.(2)&(按位求反):其作用是对两个操作数对应的每一位分别进行逻辑与操作。两操作数对应位都是 1,则该位运算结果为 1,否则该位运算结果为 0.(3)|(按位或):其作用是对两个操作数对应的每一位非别进行逻辑或操作。两操作数对应位中有 1 位是 1,则该位运算结果为 1,否则该位运算结果为 0.(4)(按位异或):其作用是对两个操作数对应的每一位分别进行逻辑异或操作。两操作数对应位的值不同,则该位运算结果为 1,否则该位运算结果为 0.(5)(右移位):将左操作数的各二进制位右移,右移位数由右操作数给出。右移 1 位相当于将操作数除以 2。例如,
11、表达式 81 的结果为 4.(6)(左移位):将左操作数的各二进制位左移,左移位数由右操作数给出。左移 1 位相当于将操作数乘以 2.例如,表达式 21 的结果为 4.注意:移位运算的结果就是位运算表达式的值,参与运算的两个操作数的值并没有发生变化。6. 条件运算符:条件运算符“?:”是 c+中位移的一个三目运算符,其使用的一般形式为:表达式?表达式 2:表达式 3该表达式执行时,先计算表达式 1,若其值为真,则表达式 2 的值为条件表达式的值;否则表达式 3 的值为条件表达式的值。条件运算符的优先级低于算术运算符,关系运算符和逻辑运算符,高于赋值运算符,结合性“从右到左”。7.逗号运算符:由逗号运算符构成的表达式称为逗号表达式,其一般形式为:表达式 1,表达式 2。,表达式 n逗号表达式的执行规则是从左到右逐个表达式执行,最后一个表达式的值是该逗号表达式的值。注意:逗号运算符的优先级最低。