18476040601 发表于 2021-9-26 19:59:00

各热门语言运算符优先级

C语言

优先级运算符名称或含义使用形式结合方向说明

1[]数组下标数组名[常量表达式]左到右
()圆括号(表达式)/函数名(形参表)
.成员选择(对象)对象.成员名
->成员选择(指针)对象指针->成员名
2-负号运算符-表达式右到左单目运算符
(类型)强制类型转换(数据类型)表达式
++前置自增运算符++变量名单目运算符
++后置自增运算符变量名++单目运算符
--前置自减运算符--变量名单目运算符
--后置自减运算符变量名--单目运算符
*取值运算符*指针变量单目运算符
&取地址运算符&变量名单目运算符
!逻辑非运算符!表达式单目运算符
~按位取反运算符~表达式单目运算符
sizeof长度运算符sizeof(表达式)
3/除表达式/表达式左到右双目运算符
*乘表达式*表达式双目运算符
%余数(取模)整型表达式/整型表达式双目运算符
4+加表达式+表达式左到右双目运算符
-减表达式-表达式双目运算符
5左移变量左到右双目运算符
>> 右移变量>>表达式双目运算符
6> 大于表达式>表达式左到右双目运算符
>=大于等于表达式>=表达式双目运算符
小于表达式双目运算符
小于等于表达式双目运算符
7==等于表达式==表达式左到右双目运算符
!=不等于表达式!= 表达式双目运算符
8&按位与表达式&表达式左到右双目运算符
9^按位异或表达式^表达式左到右双目运算符
10|按位或表达式|表达式左到右双目运算符
11&&逻辑与表达式&&表达式左到右双目运算符
12||逻辑或表达式||表达式左到右双目运算符
13?:条件运算符表达式1? 表达式2: 表达式3右到左三目运算符
14=赋值运算符变量=表达式右到左
/=除后赋值变量/=表达式
*=乘后赋值变量*=表达式
%=取模后赋值变量%=表达式
+=加后赋值变量+=表达式
-=减后赋值变量-=表达式
左移后赋值变量
>>=右移后赋值变量>>=表达式
&=按位与后赋值变量&=表达式
^=按位异或后赋值变量^=表达式
|=按位或后赋值变量|=表达式
15,逗号运算符表达式,表达式,…左到右从左向右顺序运算
同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符











C++

运算符描述例子可重载性
第一级别
::作用域解析符Class::age = 2;不可重载
第二级别
()函数调用isdigit('1')可重载
()成员初始化c_tor(int x, int y) : _x(x),_y(y*10){};可重载
[]数组数据获取array = 2;可重载
->指针型成员调用ptr->age = 34;可重载
.对象型成员调用obj.age = 34;不可重载
++后自增运算符for( int i = 0; i < 10; i++ ) cout可重载
--后自减运算符for( int i = 10; i > 0; i-- ) cout可重载
const_cast特殊属性转换const_cast(type_from);不可重载
dynamic_cast特殊属性转换dynamic_cast(type_from);不可重载
static_cast特殊属性转换static_cast(type_from);不可重载
reinterpret_cast特殊属性转换reinterpret_cast(type_from);不可重载
typeid对象类型符cout « typeid(var).name();cout « typeid(type).name();不可重载
第三级别(具有右结合性)
!逻辑取反if( !done ) …可重载
not! 的另一种表达
~按位取反flags = ~flags;可重载
compl~的另一种表达
++预自增运算符for( i = 0; i < 10; ++i ) cout可重载
--预自减运算符for( i = 10; i > 0; --i ) cout可重载
-负号int i = -1;可重载
+正号int i = +1;可重载
*指针取值int data = *intPtr;可重载
&值取指针int *intPtr = &data;可重载
new动态元素内存分配long *pVar = new long;MyClass *ptr = new MyClass(args);可重载
new []动态数组内存分配long *array = new long;可重载
delete动态析构元素内存delete pVar;可重载
delete []动态析构数组内存delete [] array;可重载
(type)强制类型转换int i = (int) floatNum;可重载
sizeof返回类型内存int size = sizeof floatNum;int size = sizeof(float);不可重载
第四级别
->*类指针成员引用ptr->*var = 24;可重载
.*类对象成员引用obj.*var = 24;不可重载
第五级别
*乘法int i = 2 * 4;可重载
/除法float f = 10.0 / 3.0;可重载
%取余数(模运算)int rem = 4 % 3;可重载
第六级别
+加法int i = 2 + 3;可重载
-减法int i = 5 - 1;可重载
第七级别
位左移int flags = 33可重载
>> 位右移int flags = 33 >> 1;可重载
第八级别
小于if( i < 42 ) …可重载
小于等于if( i可重载
> 大于if( i > 42 ) …可重载
>=大于等于if( i >= 42 ) ...可重载
第九级别
==恒等于if( i == 42 ) ...可重载
eq== 的另一种表达
!=不等于if( i != 42 ) …可重载
not_eq!=的另一种表达
第十级别
&位且运算flags = flags & 42;可重载
bitand&的另一种表达
第十一级别
^位异或运算flags = flags ^ 42;可重载
xor^的另一种表达
第十二级别
|位或运算flags = flags | 42;可重载
bitor|的另一种表达
第十三级别
&&逻辑且运算if( conditionA && conditionB )…可重载
and&&的另一种表达
第十四级别
||逻辑或运算if( conditionA || conditionB ) ...可重载
or||的另一种表达
第十五级别(具有右结合性)
? :条件运算符int i = (a > b) ? a : b;不可重载
第十六级别(具有右结合性)
=赋值int a = b;可重载
+=加赋值运算a += 3;可重载
-=减赋值运算b -= 4;可重载
*=乘赋值运算a *= 5;可重载
/=除赋值运算a /= 2;可重载
%=模赋值运算a %= 3;可重载
&=位且赋值运算flags &= new_flags;可重载
and_eq&= 的另一种表达
^=位异或赋值运算flags ^= new_flags;可重载
xor_eq^=的另一种表达
|=位或赋值运算flags |= new_flags;可重载
or_eq|=的另一种表达
位左移赋值运算flags可重载
>>=位右移赋值运算flags >>= 2;可重载
第十七级别
throw异常抛出throw EClass(“Message”);不可重载
第十八级别
,逗号分隔符for( i = 0, j = 0; i < 10; i++, j++) …可重载



































JAVA:


运算符结合性
[ ] . ( ) (方法调用)从左向右
! ~ ++ -- +(一元运算) -(一元运算)从右向左
* / %从左向右
+ -从左向右
> >>>从左向右
< >= instanceof从左向右
== !=从左向右
&从左向右
^从左向右
|从左向右
&&从左向右
||从左向右
?:从右向左
=从右向左
一个特殊的例子:public classstlye{public staticvoid main(String[] args){int a=10,b=6;System.out.println("改变之前的数:a="+a+",b="+b);a-=b++;System.out.println("改变之后的数:a="+a+",b="+b);}}运算结果为:改变之前的数:a=10,b=6改变之后的数:a=4,b=7因为b++运算中先执行++,再返回后置++运算表达式(b++)的返回值(6)给-=运算符。在这个程序中a-=b++等于a=a-b++=10-6,所以a=4。C#


优先级类别运算符
1基本(x) x.y f(x) a x++ x-- new typeofsizeof checked unchecked
2单目+ - ! ~ ++x --x (T)x
3乘法与除法* / %
4加法与减法+ -
5移位运算>
6关系运算< > =
7条件等== !=
8位逻辑与&
9位逻辑异或^
10位逻辑或|
11条件与&&
12条件或‖
13条件?:
14赋值=
一个特殊的例子:class Program{static voidMain(string[] args){int a; a = 10;int b = 4;a += b++;Console.WriteLine("a={0}",a);Console.WriteLine("b={0}",b);Console.ReadLine();}}运算结果为:a=14b=5在这个程序中a+=b等于a=a+b=10+4,因为 b++ 时返回了一个临时变量后才进行自增。Visual Basic
优先级类别运算符
1乘方^
2取负-
3乘*
3除/
4四舍五入除/位移\
5取模Mod
6加+
6减-
7字符串合并& 或 +
8相等=
8大于>
8大于等于>=
8小于<
8小于等于<=
8不等于<>
8同类对象Is
8Like运算Like
9非Not
10与And
11或Or
12异或Xor
13逻辑等Eqv
14逻辑大于等于(蕴含)Imp























页: [1]
查看完整版本: 各热门语言运算符优先级