C++运算符优先级口诀(自己总结)

本文通过一首简洁明了的口诀帮助读者快速掌握C++中的运算符优先级顺序。从括号到成员访问,再到逻辑运算,涵盖了C++编程中常见的各种运算符及其使用场景。

括号和成员,后置自增减;

 

非反和负正,前置自减增,

取地址,解引用,字节数,转类型;

 

乘除模取余,加减再位移;

 

小等大等等不等,判断条件最常用;

 

位与异(或)或,逻辑与或,三元赋值,逗号最末;

<think> 我们被要求提供一个所有运算符优先级关系的列表说明。根据引用[1][2][4]中的信息,我们可以整理出一个详细的C语言运算符优先级列表。注意,虽然引用是针对C语言的,但大多数语言(如C++、Java、JavaScript等)的运算符优先级与C语言相似,但可能存在细微差异。 下面将按照优先级从高到低的顺序列出所有运算符,并给出结合性和示例。同时,我们将按照要求使用中文回答,并在引用处添加引用标记。 ### C语言运算符优先级完整列表(从高到低) | 优先级 | 运算符 | 描述 | 结合性 | 示例 | |--------|--------|------|--------|------| | 1 | `()`<br>`[]`<br>`.`<br>`->`<br>`++` (后缀)<br>`--` (后缀)<br>`{}` (C99复合字面量) | 函数调用<br>数组下标<br>结构体/联合体成员访问<br>通过指针访问结构体/联合体成员<br>后置自增<br>后置自减<br>复合字面量 | 从左到右 | `func(arg)`<br>`arr[index]`<br>`obj.member`<br>`ptr->member`<br>`i++`<br>`i--`<br>`(int []){1,2,3}` | | 2 | `++` (前缀)<br>`--` (前缀)<br>`+` (正号)<br>`-` (负号)<br>`!`<br>`~`<br>`(type)`<br>`*` (解引用)<br>`&` (取地址)<br>`sizeof`<br>`_Alignof` (C11) | 前置自增<br>前置自减<br>一元正号<br>一元负号<br>逻辑非<br>按位取反<br>强制类型转换<br>解引用<br>取地址<br>计算大小<br>对齐查询 | 从右到左 | `++i`<br>`--i`<br>`+5`<br>`-5`<br>`!flag`<br>`~bits`<br>`(float)num`<br>`*ptr`<br>`&var`<br>`sizeof(int)`<br>`_Alignof(int)` | | 3 | `*`<br>`/`<br>`%` | 乘法<br>除法<br>取模(求余) | 从左到右 | `a * b`<br>`a / b`<br>`a % b` | | 4 | `+`<br>`-` | 加法<br>减法 | 从左到右 | `a + b`<br>`a - b` | | 5 | `<<`<br>`>>` | 左移<br>右移 | 从左到右 | `num << 2`<br>`num >> 3` | | 6 | `<`<br>`<=`<br>`>`<br>`>=` | 小于<br>小于等于<br>大于<br>大于等于 | 从左到右 | `a < b`<br>`a <= b`<br>`a > b`<br>`a >= b` | | 7 | `==`<br>`!=` | 等于<br>不等于 | 从左到右 | `a == b`<br>`a != b` | | 8 | `&` | 按位与 | 从左到右 | `flags & MASK` | | 9 | `^` | 按位异或 | 从左到右 | `a ^ b` | | 10 | `\|` | 按位或 | 从左到右 | `opt1 \| opt2` | | 11 | `&&` | 逻辑与 | 从左到右 | `cond1 && cond2` | | 12 | `\|\|` | 逻辑或 | 从左到右 | `flag1 \|\| flag2` | | 13 | `?:` | 条件运算符 | 从右到左 | `condition ? expr1 : expr2` | | 14 | `=`<br>`+=`<br>`-=`<br>`*=`<br>`/=`<br>`%=`<br>`<<=`<br>`>>=`<br>`&=`<br>`^=`<br>`\|=` | 赋值<br>加后赋值<br>减后赋值<br>乘后赋值<br>除后赋值<br>取模后赋值<br>左移后赋值<br>右移后赋值<br>按位与后赋值<br>按位异或后赋值<br>按位或后赋值 | 从右到左 | `a = b`<br>`a += 5`<br>`a -= 5`<br>`a *= 5`<br>`a /= 5`<br>`a %= 5`<br>`a <<= 1`<br>`a >>= 1`<br>`a &= b`<br>`a ^= b`<br>`a \|= b` | | 15 | `,` | 逗号运算符 | 从左到右 | `a=1, b=2` | ### 关键说明 1. **结合性**:当同一优先级运算符连续出现时,结合性决定了运算顺序。例如,`a + b + c`由于`+`是左结合,等价于`(a + b) + c`;而`a = b = c`由于`=`是右结合,等价于`a = (b = c)`。 2. **位运算符**:按位与(`&`)、按位异或(`^`)、按位或(`|`)的优先级依次降低,且都高于逻辑运算符(`&&`和`||`)[^1][^2]。 3. **移位运算符**:移位运算符(`<<`和`>>`)的优先级低于算术运算符(`+`、`-`、`*`、`/`、`%`),但高于关系运算符(`<`、`<=`、`>`、`>=`)[^4]。 4. **自增自减**:后缀自增/自减(如`i++`)的优先级高于前缀自增/自减(如`++i`),因为后缀属于第一优先级,而前缀属于第二优先级[^3]。 ### 常见错误示例 在二分查找中,计算中间索引时容易出错: ```c int mid = left + (right - left) >> 1; // 错误:等价于 [left + (right-left)] >> 1 ``` 正确写法: ```c int mid = left + ((right - left) >> 1); // 使用括号确保先移位 int mid = (left + right) >> 1; // 但注意防止整数溢出 ``` ### 总结口诀 为了方便记忆,可以简记为: > 括号成员第一;全体单目第二;乘除取余三四;加减五;移位六;关系七;相等不等八;位与九,异或十,位或十一;逻辑与十二,逻辑或十三;条件十四,赋值十五,逗号最后。 注:以上口诀中“全体单目”包括第二优先级的所有一元运算符。 §§相关问题§§ 1. 如何避免C语言中的运算符优先级错误? 2. 不同编程语言(如Java、Python)的运算符优先级与C语言有何差异? 3. 位运算符的实际应用场景有哪些? </think> ### C语言运算符优先级关系完整列表说明 根据C语言标准规范,运算符优先级从高到低排列如下(结合性均为从左到右,除非特别注明): #### **优先级1:后缀运算符** | 运算符 | 描述 | 示例 | 引用 | |--------|--------------------|----------------|------| | `()` | 函数调用 | `func(arg)` | [^1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值