C++信奥赛/竞赛/专项选拔赛:史上最好记的优先级口诀!

优先级口诀

括号成员第一;
全体单目第二;
乘除余三,加减四;
移位五,关系六;
等于不等排第七;
位与异或和位或;
“三分天下” 八九十;
逻辑与十一,逻辑或十二;
条件十三,赋值十四;
逗号十五最末尾。

解释

1. 括号成员第一

  • 括号:包括小括号 ()、中括号 [] 和大括号 {} 等。小括号常用于函数调用、强制类型转换和表达式分组;中括号用于数组下标访问;大括号用于代码块和初始化列表等。括号的优先级是最高的,会先计算括号内的表达式。
  • 成员访问:成员访问运算符 .(用于对象访问成员)和 ->(用于指针访问成员)优先级也很高,和括号处于同一优先级层次。例如 obj.member 或 ptr->member 会优先确定要访问的成员。
2. 全体单目第二

单目运算符优先级仅次于括号和成员访问运算符。单目运算符只需要一个操作数,常见的单目运算符有:

  • 逻辑非 !:对布尔值取反,如 !true 结果为 false
  • 按位取反 ~:对整数的二进制位逐位取反。
  • 正负号 + 和 -:表示正数或负数,如 -5
  • 自增 ++ 和自减 --:有前置和后置两种形式,前置形式先改变变量的值再使用,后置形式先使用变量的值再改变。
  • 地址运算符 &:用于获取变量的地址。
  • 解引用运算符 *:用于访问指针所指向的对象。
3. 乘除余三,加减四

  • 乘除余:乘法 *、除法 / 和取余 % 运算符优先级相同且高于加减运算符。它们会先于加减运算符进行计算,例如 5 + 3 * 2 会先计算 3 * 2 得到 6,再计算 5 + 6 得到 11
  • 加减:加法 + 和减法 - 运算符优先级低于乘除余运算符。
4. 移位五,关系六

  • 移位:左移 << 和右移 >> 运算符用于对整数的二进制位进行移位操作。例如 4 << 1 是将 4 的二进制表示左移一位,结果为 8
  • 关系:关系运算符用于比较两个值的大小关系,包括大于 >、小于 <、大于等于 >=、小于等于 <=。这些运算符用于构建条件表达式,结果为布尔值。
5. 等于不等排第七

等于 == 和不等于 != 运算符用于判断两个值是否相等,优先级低于关系运算符。例如 a == b 用于判断 a 和 b 的值是否相等。

6. 位与异或和位或;“三分天下” 八九十

  • 位与 &:对两个整数的二进制位进行按位与操作,只有对应位都为 1 时结果位才为 1
  • 异或 ^:对两个整数的二进制位进行按位异或操作,对应位不同时结果位为 1,相同则为 0
  • 位或 |:对两个整数的二进制位进行按位或操作,对应位只要有一个为 1 结果位就为 1
    这三个运算符优先级依次降低,所以说 “三分天下” 八九十。
7. 逻辑与十一,逻辑或十二

  • 逻辑与 &&:用于逻辑与运算,只有当两个操作数都为 true 时结果才为 true。例如 (a > 5) && (b < 10) 只有当 a 大于 5 且 b 小于 10 时结果才为 true
  • 逻辑或 ||:用于逻辑或运算,只要两个操作数中有一个为 true 结果就为 true
8. 条件十三,赋值十四

  • 条件:条件运算符 ?: 是 C++ 中唯一的三目运算符,形式为 condition ? expression1 : expression2。如果 condition 为 true,则返回 expression1 的值,否则返回 expression2 的值。
  • 赋值:赋值运算符包括 =+=-=*=/= 等,用于给变量赋值。赋值运算符优先级较低,会在其他大多数运算完成后执行。
9. 逗号十五最末尾

逗号运算符 , 优先级最低,它用于将多个表达式连接在一起,从左到右依次计算每个表达式的值,最后整个逗号表达式的值是最后一个表达式的值。例如 (a = 1, b = 2, a + b) 先将 1 赋给 a,再将 2 赋给 b,最后整个表达式的值为 a + b 的结果 3

这个口诀涵盖了 C++ 中常见运算符的优先级顺序,有助于你快速判断表达式的计算顺序。不过,在实际编程中,如果对优先级不确定,最好使用括号来明确运算顺序,以提高代码的可读性和避免潜在的错误。

你可能感兴趣的:(c++信奥赛01顺序结构,算法,前端,c++)