C++ 优先级
优先级 | 运算符 | 结合律 | 助记 |
---|---|---|---|
1 | :: | 从左至右 | 作用域 |
2 | a++; a--; type(); type{}; a(); a[]; .; ->; | 从左至右 | 后缀自增减、函数风格转型、函数调用、下标、成员访问 |
3 | !; ~; ++a; --a; +a; -a; (type); sizeof; &a; *a; new; new[]; delete; delete[]; | 从右至左 | 逻辑非、按位非、前缀自增减、正负、C 风格转型、取大小、取址、指针访问、动态内存分配 |
4 | .*; ->* | 从左至右 | 指向成员指针 |
5 | a*b; a/b; a%b; | 从左至右 | 乘除、取模 |
6 | a+b; a-b; | 从左至右 | 加减 |
7 | << ; >> | 从左至右 | 按位左右移 |
8 | <; <=; >; >=; | 从左至右 | 大小比较 |
9 | ==; !=; | 从左至右 | 等价比较 |
10 | a & b | 从左至右 | 按位与 |
11 | a ^ b | 从左至右 | 按位异或 |
12 a | b | 从左至右 | 按位或 | |
13 | a && b | 从左至右 | 逻辑与 |
14 | a || b | 从左至右 | 逻辑或 |
15 | a ? b : c; =; +=; -=; *=; /=; %=; &=; ^=; |=; <<=; >>=; | 从右至左 | 三元条件、赋值 |
16 | , | 从左至右 | 逗号 |
C优先级口诀
- 括号成员排第一;//括号运算符 成员运算符. ->
- 全体单目排第二; //所有的单目运算符比如++、 –、 +(正)、 -(负) 、指针运算*、&
- 乘除余三,加减四; //这个”余”是指取余运算即%
- 移位五,关系六; //移位运算符:<< >> ,关系:> < >= <= 等
- 等于(与)不等排第七; //即== 和!=
- 位与异或和位或; “三分天下”八九十 //这几个都是位运算: 位与(&)异或(^)位或(|)
- 逻辑或跟与; 十二和十一; //注意顺序:优先级(||) 底于 优先级(&&)
- 条件高于赋值, //三目运算符优先级排到13 位只比赋值运算符和”,”高
- 逗号运算级最低! //逗号运算符优先级最低
% 运算
运算结果和被除数正负号同号
9 % 5 = 4;
9 % -5 = 4;
-9 % 5 = -4;
-9 % -5 = -4;
逻辑运算
- & 的用法
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
- | 的用法
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1
1 | 1 = 1
- ^ 的用法
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0
0 ^ 0 = 0
- 移位操作 << >>