运算符优先级

C++运算符优先级#

有时在写判断条件时会忘记运算符的优先级,每次查完就忘了,索性在这里摘抄一下。

运算符说明 运算符
第1组优先级,无关联
范围解析 ::
第2组优先级,从左往右关联
成员选择(对象或指针) .或->
数组下标 []
函数调用 ()
后缀递增 ++
后缀递减 --
类型名称 typeid
类型转换 const_cast、dynamic_cast、reinterpret_cast、static_cast
第3组优先级,从右往左关联
对象或类型的大小 sizeof
前缀递增 ++
前缀递减 --
二进制反码 ~
逻辑“非” !
正负号 +、-
取地址 &
解地址符 *
创建对象 new
析构对象 delete
强制转换 ()
第4组优先级,从左往右关联
指向成员的指针(对象或指针) .* 或->*
第5组优先级,从左往右关联
乘除和取模运算 *、/ 、%
第6组优先级,从左往右关联
加减运算 + 、-
第7组优先级,从左往右关联
移位运算 >>或<<
第8组优先级,从左往右关联
大于、小于、大于等于、小于等于 >, <, >=, <=
第9组优先级,从左往右关联
等于、不等于 ==、!=
第10组优先级,从左往右关联
按位“与” &
第11组优先级,从左往右关联
按位“异或” ^
第12组优先级,从左往右关联
按位“或” |
第13组优先级,从左往右关联
逻辑与 &&
第14组优先级,从左往右关联
逻辑或 ||
第15组优先级,从右到左关联
条件 ?:
赋值 =
乘法赋值 *=
除法赋值 /=
取模赋值 %=
加法赋值 +=
减法赋值 -=
左移赋值 <<=
右移赋值 >>=
按位“与”赋值 &=
按位“或”赋值 |=
按位“异或”赋值 ^=
抛出表达式 throw
第16组优先级,从左往右关联
逗号分隔符 ,

优先级由高到低,同一组的运算符具有相同的优先级。关联是指同一优先级的运算符的解析顺序。此外,()具有最高优先级,可以使用小括号来改变运算顺序。

示例#

复合赋值运算和加减乘除#

复合赋值运算都是比加减乘除优先级低的。

// 加赋值
int a = 10, b = a, c = b, d = c;
a += 2 + 3; // 15
b += 2 - 3; // 9
c += 2 * 3; // 16
d += 4 / 2; // 12

// 减赋值
a = 10, b = a, c = b, d = c;
a -= 2 + 3; // 5
b -= 2 - 3; // 11
c -= 2 * 3; // 4
d -= 4 / 2; // 8

// 乘赋值
a = 10, b = a, c = b, d = c;
a *= 2 + 3; // 50
b *= 2 - 3; // -10
c *= 2 * 3; // 60
d *= 4 / 2; // 20

// 除赋值
a = 10, b = a, c = b, d = c;
a /= 2 + 3; // 2
b /= 2 - 3; // -10
c /= 2 * 3; // 1
d /= 4 / 2; // 5

// 移位赋值
a = 256, b = a, c = b, d = c;    
a >>= 2 + 3;    // 8
b >>= 3 - 2;    // 128
c >>= 2 * 3;    // 4
d >>= 4 / 2;    // 64

// 按位与赋值
a = 15, b = a, c = b, d = c;    // 15 = 0b1111
a &= 2 + 3; // 5
b &= 2 - 3; // 15
c &= 2 * 3; // 6
d &= 4 / 2; // 2

逻辑运算和按位运算#

按位运算比逻辑运算的优先级高。
按位运算之间也是有优先级的,&最高,^其次,|最低。

bool flag = false;
auto res = flag && 1 | 3;   // res类型是bool 先计算按位运算,再进行逻辑运算
auto n = 2 | 1 & 4; // 2

作者:cwtxx

出处:https://www.cnblogs.com/cwtxx/p/18718229

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   cwtxx  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示