当前位置:首页 > 百科

运算符优先级

在一个表达式中可能包含多个有不同运算符连接起来的、具有不同数据类型的来自数据对象;由于表达式有多种运算,360百科不同的运算顺序可能得出担打调械随不同结果甚至出现错误运算错误,因为当表达式中含多种运算时,必须按一定顺序进行结合,才能保证运算的合理性和结果掉清袁细升仍鲁的正确性、唯一性市氢径湖

优先级从上到下依次怀五似声递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。表达式的结合次序取决于表达式中各种运算符的优先级。优先级高的运算符先结合,优波剧认先级低的运算符后结合,同一行中的运算符的优先级相同。

  • 中文名 运算符优先级
  • 外文名 Operator Precedence
  • 结合次序 表达式中各种运算符的优先级
  • 最高优先级 是一类特殊的操作
  • 单目运算符 具有相同的优先级

优先级

  优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。

  相同优先级中,按结合顺序计算。大多数运算是从左至右计算来自,只有三个优先级坏器是从右至左结合的,它们是单目360百科运算符、条件运算符、赋值运算

  基本的优先级需要记住:

  指针最优,单目运算优于双目运算。如正负号。

  先算术运算,后移位运算,最后位运算。请特别注意:1 << 3 + 2 && 7等价于 (1 << (3 + 2))&&7.

  逻辑运算最后计算。

C语言优先级

  优先级

  运算符

  名称或含义

  使用相娘故试粒路列形式

  结合方向

  说明

  1

  []

  数组下标

  数组名[常量表达式]

  左到右

  ()

  圆括号

  (表达式)/函数名(形参然胡美乐表)

  .

  成员选择(对象)

  对象.成员名

  ->

  成员选择(指针)

  对象指针->成员名

  2

  -

  负号运算符

  -常量

  右到左

  单目运今同些到紧把为宁数往罪算符

  (type)

  强制类型转换

  (数据类型)表达式

  ++

  自增运算符

  ++变量名

  单目运算符

冷衡满孩苏  --

  自减运算符

  --变量名

  单目运算符

  *

  取值运算符

  *指针变量

  单目运算符

  &

  取地址运算符

  &变量名

  单目运算符

  !

  逻体际倒古史益鸡渐杂参辑非运算符

  !表达式

  单目运算符

  ~

  按位取反运算符

  ~表达式

  单目运算符

  sizeof

  长度运算符

  s带须客么世但的优izeof(表达式)

末些案3

  /

  除

  表达式/表达式

左到右

  双目运算符

  *

李良乱氧曲  乘

  表达式*表达

  双目运算符

  %

  使主令兴乙抓顶方清服余数(取模)

  整型表达式%整型表达式

  双目运算符

  4

  +

  加

  表达式+表达式

  左到右

  双目运算吧占

  -

  减

  表达式-表达式

  双目运算符

  5

  <<

  左移

  变量<<表达式

  左到右

  双目运算符

  >>

  右移

 尼五支但争尽伤福 变量>>表达式

  双目运顶云德管困激算符

  6

  >

  大于

  表达式>表达式

  左到右

  双目运算符

  >=

  大于等结整还结但离香帮布就

  表达式>=表达确胜

  双目运算符

  <

  小于

  表达式<表达式

  双目运算

  <=

  小于等于

  表达式<=表达式

  双目运算

  7

  ==

  等于

  表达式==表达式

  左到右

  双目运算符

  !=

  不等于

  表达式!= 表达式

  双目文治场源下齐解操旧威运算符

  8

  &

  按位与

  表达式&表达式

  左到右

  双目运算

  9

  ^

  按位异或

  表达式^表达式

 头放 左到右

  双目运算符

  10

  |

  按位或

  表达式|表达式

  左到右

  双目运算符

  11

  &&

  逻辑与

  表达式&&表达式

  左到右

  双目运算符

转功渐粒渐吗元升  12

  ||

  逻辑或

  表达式||表达式

  左到右

  双目运算符

  13

  ?:

  条件运算符

  表达式1? 表达式2: 表达式3

  右到左

  三目运算符

  14

  =

  赋值运算符

  变量=表达式

  右到左

  /=

  除后赋值

  变量/=表达式

  *=

  乘后赋值

  变量*=表达式

  %=

  取模后赋值

  变量%=表达式

  +=

  加后赋值

  变量+=表达式

  -=

  减后赋值

  变量-=表达式

  <<=

  左移后赋值

  变量<<=表达式

  >>=

  右移后赋值

  变量>>=表达式

  &=

  按位与后赋值

  变量&=表达式

  ^=

  按位异或后赋值

  变量^=表达式

  |=

  按位或后赋值

  变量|=表达式

  15

  ,

  逗号运算符

  表达式,表达式,…

  左到右

  从左向右顺序运算

  说明:

  同一优先级的运算符,运算次序由结合方向所决定。

  简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

C++

  Operator

  Description

  E换心作xample

  Overloadable

  Group 1(no associativity)

  ::

  Scope resolution operator

  Class::age = 2;

  NO

  Group 2

  ()

  Function call

  is来自digit('1')

  YES

  ()

  Member initaliz飞有导克争ation

  c_tor(机术二部家治起int x, int y) : _x(x), _y(y*10){};

  YES

  []

  Array access

  array[4] 360百科= 2;

  YES

  ->

  Member access from a pointer

  ptr->age = 34;

  YES

  .

  Member access from an object

  obj.age = 34;

  NO

  ++

  Post-increment

  for( int i = 0呢率垂六复云查益每; i < 10; i++ ) cout << i;

  YES

  --

  Post-decrement

  for( 绍背度找便套就int i = 10; i > 0导日; i-- ) cout << i;

  YES

  cons印科相更百英升段身样器t_cast

  Spe德急于核厚cial cast

  const_cast<type_to>(type_from);

  NO

  dynamic_cast

  Special cast

  dynamic_cast<type_to>(t困按显布则留当破ype_from);

  NO

  static_cast

  Special cast

  static_cast<type_to>(type_from);

  NO

  reinte间就是动执载场布应rpret_cast

  Special cast

  reinterpret_cast<type_to>(type_from);

  NO

  type广行策河缩阻胶正思置山id

  Runtime 讨决房逐难职民特汉力type information

  cout &laquo; typeid(va高全际输盾搞标屋r).name();

  cout &laquo; typeid(type).name();

  NO

  Gro安什油民底染格盟仍良迫up 3(right-to-left associativity)

  !

  Logical negatio开流展深功n

  if( !done ) …

 正湖给 YES

  not

  Alternate spelling for !

  ~

  Bit限海wise complement

  flags = ~flags;

  YES

  compl

  Alternate spelling for ~

  ++

  Pre-increment

  for( i = 0; i < 10; ++i ) cout << i;

  YES

  --

  Pre-decrement

  for( i = 10; i > 0; --i ) cout << i;

  YES

  -

  Unary minus

  int i = -1;

  YES

  +

  Unar范欢每止本尽复律机y plus

  int i = +1;

  YES

  *

  Dereference

  int data = *intPtr;

  YES

  &

  Address of

  int *intPtr = &data;

  YES

  new

  Dynamic memory allocation

  long *pVar = new long;

  MyClass *ptr = new MyClass(args);

  YES

  new []

  Dynamic memory allocation of array

  long *array = new long[n];

  YES

  delete

  Deallocating the memory

  delete pVar;

  YES

  delete []

  Deallocating the memory of array

  delete [] array;

  YES

  (type)

  Cast to a given type

  int i = (int) floatNum;

  YES

  sizeof

  Return size of an object or type

  int size = sizeof floatNum;

  int size = sizeof(float);

  NO

  Group 4

  ->*

  Member pointer selector

  ptr->*var = 24;

  YES

  .*

  Member object selector

  obj.*var = 24;

  NO

  Group 5

  *

  Multiplication

  int i = 2 * 4;

  YES

  /

  Division

  float f = 10.0 / 3.0;

  YES

  %

  Modulus

  int rem = 4 % 3;

  YES

  Group 6

  +

  Addition

  int i = 2 + 3;

  YES

  -

  Subtraction

  int i = 5 - 1;

  YES

  Group 7

  <<

  Bitwise shift left

  int flags = 33 << 1;

  YES

  >>

  Bitwise shift right

  int flags = 33 >> 1;

  YES

  Group 8

  <

  Comparison less-than

  if( i < 42 ) …

  YES

  <=

  Comparison less-than-or-equal-to

  if( i <= 42 ) ...

  YES

  >

  Comparison greater-than

  if( i > 42 ) …

  YES

  >=

  Comparison greater-than-or-equal-to

  if( i >= 42 ) ...

  YES

  Group 9

  ==

  Comparison equal-to

  if( i == 42 ) ...

  YES

  eq

  Alternate spelling for ==

  !=

  Comparison not-equal-to

  if( i != 42 ) …

  YES

  not_eq

  Alternate spelling for !=

  Group 10

  &

  Bitwise AND

  flags = flags & 42;

  YES

  bitand

  Alternate spelling for &

  Group 11

  ^

  Bitwise exclusive OR (XOR)

  flags = flags ^ 42;

  YES

  xor

  Alternate spelling for ^

  Group 12

  |

  Bitwise inclusive (normal) OR

  flags = flags | 42;

  YES

  bitor

  Alternate spelling for |

  Group 13

  &&

  Logical AND

  if( conditionA && conditionB ) …

  YES

  and

  Alternate spelling for &&

  Group 14

  ||

  Logical OR

  if( conditionA || conditionB ) ...

  YES

  or

  Alternate spelling for ||

  Group 15(right-to-left associativity)

  ? :

  Ternary conditional (if-then-else)

  int i = (a > b) ? a : b;

  NO

  Group 16(right-to-left associativity)

  =

  Assignment operator

  int a = b;

  YES

  +=

  Increment and assign

  a += 3;

  YES

  -=

  Decrement and assign

  b -= 4;

  YES

  *=

  Multiply and assign

  a *= 5;

  YES

  /=

  Divide and assign

  a /= 2;

  YES

  %=

  Modulo and assign

  a %= 3;

  YES

  &=

  Bitwise AND and assign

  flags &= new_flags;

  YES

  and_eq

  Alternate spelling for &=

  ^=

  Bitwise exclusive or (XOR) and assign

  flags ^= new_flags;

  YES

  xor_eq

  Alternate spelling for ^=

  |=

  Bitwise normal OR and assign

  flags |= new_flags;

  YES

  or_eq

  Alternate spelling for |=

  <<=

  Bitwise shift left and assign

  flags <<= 2;

  YES

  >>=

  Bitwise shift right and assign

  flags >>= 2;

  YES

  Group 17

  throw

  throw exception

  throw EClass("Message");

  NO

  Group 18

  ,

  Sequential evaluation operator

  for( i = 0, j = 0; i < 10; i++, j++ ) …

  YES

Java

运算符结合性
[ ] . ( ) (方法调用)从左向右
! ~ ++ -- +(一元运算) -(一元运算)从右向左
* / %从左向右
+ -从左向右
<< >> >>>从左向右
< <= > >= instanceof从左向右
== !=从左向右
&从左向右
^从左向右
|从左向右
&&从左向右
||从左向右
?:从右向左

  =

  从右向左

  一个特殊的例子:

  public class stlye

  {

  public static void 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++ x-- new typeof sizeof checked unchecked

  2

  单目

  + - ! ~ ++x --x (T)x

  3

  乘法与除法

  * / %

  4

  加法与减法

  + -

  5

  移位运算

  << >>

  6

  关系运算

  < > <= >=

  7

  条件等

  == !=

  8

  位逻辑与

  &

  9

  位逻辑异或

  ^

  10

  位逻辑或

  |

  11

  条件与

  &&

  12

  条件或

  ‖

  13

  条件

  ?:

  14

  赋值

  =

  一个特殊的例子:

  class Program

  {

  static void Main(string[] args)

  {

  int a; a = 10; int b = 4;

  a += b++;

  Console.WriteLine("a={0}",a);

  Console.WriteLine("b={0}", b);

  Console.ReadLine();

  }

  }

  运算结果为:

  a=14

  b=5

  在这个程序中a+=b等于a=a+b=10+4,因为 b++ 时返回了一个临时变量后才进行自增。

Visual Basic

  优先级

  类别

  运算符

  1

取负-
2乘方^
3*
3/
4四舍五入除/位移\
5取模Mod
6字符串合并& 或 +
7+
7-
8相等=
8大于>
8大于等于>=
8小于<
8小于等于<=
8不等于<>
8同类对象Is
8Like运算Like
9Not
10And
11Or
12异或Xor
13逻辑等Eqv
14逻辑大于等于(蕴含)Imp
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:fendou3451@163.com
标签:

  • 关注微信
上一篇:小小三峡
下一篇:对溴氟苯

相关文章