精华内容
下载资源
问答
  • 2021-05-21 08:39:26

    运算符的种类C语言的运算符可分为以下几类:

    1.算术运算符

    用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。

    2.关系运算符

    用于比较运算。包括大于(>)、小于(=)、小于等于(<=)和不等于(!=)六种。

    3.逻辑运算符

    用于逻辑运算。包括与(&&)、或(||)、非(!)三种。

    4.位操作运算符

    参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<>)六种。

    5.赋值运算符

    用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。

    6.条件运算符

    这是一个三目运算符,用于条件求值(?:)。

    7.逗号运算符

    用于把若干表达式组合成一个表达式(,)。

    8.指针运算符

    用于取内容(*)和取地址(&)二种运算。

    9.求字节数运算符

    用于计算数据类型所占的字节数(sizeof)。

    10.特殊运算符

    有括号(),下标[],成员(→,.)等几种。

    优先级和结合性

    C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

    算术运算符和算术表达式基本的算术运算符

    1.加法运算符“+”加法运算符为双目运算符,即应有两个量参与加法运算。如a+b,4+8等。具有右结合性。

    2.减法运算符“-”减法运算符为双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有左结合性。

    3.乘法运算符“*”双目运算,具有左结合性。

    4.除法运算符“/”双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。

    void main(){

    printf("\n\n%d,%d\n",20/7,-20/7);

    printf("%f,%f\n",20.0/7,-20.0/7);

    }

    双目运算具有左结合性。参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。 printf("\n\n%d,%d\n",20/7,-20/7);

    printf("%f,%f\n",20.0/7,-20.0/7);

    本例中,20/7,-20/7的结果均为整型,小数全部舍去。而20.0/7和-20.0/7由于有实数参与运算,因此结果也为实型。

    5.求余运算符(模运算符)“%”双目运算,具有左结合性。要求参与运算的量均为整型。求余运算的结果等于两数相除后的余数。

    void main(){

    printf("%d\n",100%3);

    }

    双目运算,具有左结合性。求余运算符% 要求参与运算的量均为整型。本例输出100除以3所得的余数1。

    自增1,自减1运算符

    自增1运算符记为“++”,其功能是使变量的值自增1。自减1运算符记为“--”,其功能是使变量值自减1。自增1,自减1运算符均为单目运算,都具有右结合性。可有以下几种形式: ++i i自增1后再参与其它运算。--i i自减1后再参与其它运算。

    i++  i参与运算后,i的值再自增1。

    i--  i参与运算后,i的值再自减1。

    在理解和使用上容易出错的是i++和i--。特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。

    void main(){

    int i=8;

    printf("%d\n",++i);

    printf("%d\n",--i);

    printf("%d\n",i++);

    printf("%d\n",i--);

    printf("%d\n",-i++);

    printf("%d\n",-i--);

    } i

    i

    i

    i

    i

    i

    i

    printf("%d\n",++i);

    printf("%d\n",--i);

    printf("%d\n",i++);

    printf("%d\n",i--);

    printf("%d\n",-i++);

    printf("%d\n",-i--);

    i的初值为8

    第2行i加1后输出故为9;

    第3行减1后输出故为8;

    第4行输出i为8之后再加1(为9);

    第5行输出i为9之后再减1(为8) ;

    第6行输出-8之后再加1(为9);

    第7行输出-9之后再减1(为8)

    void main(){

    int i=5,j=5,p,q;

    p=(i++)+(i++)+(i++);

    q=(++j)+(++j)+(++j);

    printf("%d,%d,%d,%d",p,q,i,j);

    }

    i

    i+i+i--->p,i+1-->i,i+1-->i,i+1-->i

    j+1->j,j+1->j,j+1->j,j+j+j->q int i=5,j=5,p,q;

    p=(i++)+(i++)+(i++);

    q=(++j)+(++j)+(++j);

    这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。算术表达式表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。单个的常量、变量、函数可以看作是表达式的特例。

    算术表达式

    是由算术运算符和括号连接起来的式子, 以下是算术表达式的例子:

    a+b  (a*2)/c (x+r)*8-(a+b)/7  ++i sin(x)+sin(y)  (++i)-(j++)+(k--)

    赋值运算符和赋值表达式

    简单赋值运算符和表达式,简单赋值运算符记为“=”。由“= ”连接的式子称为赋值表达式。其一般形式为: 变量=表达式 例如:

    x=a+b

    w=sin(a)+sin(b)

    y=i+++--j 赋值表达式的功能是计算表达式的值再赋予左边的变量。赋值运算符具有右结合性。因此

    a=b=c=5

    可理解为

    a=(b=(c=5))

    在其它高级语言中,赋值构成了一个语句,称为赋值语句。而在C中,把“=”定义为运算符,从而组成赋值表达式。凡是表达式可以出现的地方均可出现赋值表达式。例如,式子x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x ,故x应等于13。

    在C语言中也可以组成赋值语句,按照C语言规定,任何表达式在其未尾加上分号就构成为语句。因此如x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。

    如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:

    1.实型赋予整型,舍去小数部分。前面的例2.9已经说明了这种情况。

    2.整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。

    3.字符型赋予整型,由于字符型为一个字节,而整型为二个字节,故将字符的ASCII码值放到整型量的低八位中,高八位为0。

    4.整型赋予字符型,只把低八位赋予字符量。

    void main(){

    int a,b=322;

    float x,y=8.88;

    char c1='k',c2;

    a=y;

    x=b;

    a=c1;

    c2=b;

    printf("%d,%f,%d,%c",a,x,a,c2);

    }

    int a,b=322;

    float x,y=8.88;

    char c1='k',c2;

    printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b);

    本例表明了上述赋值运算中类型转换的规则。a为整型,赋予实型量y值8 88后只取整数8。x为实型,赋予整型量b值322,后增加了小数部分。字符型量c1赋予a变为整型,整型量b赋予c2 后取其低八位成为字符型(b的低八位为01000010,即十进制66,按ASCII码对应于字符B)。

    复合赋值符及表达式

    在赋值符“=”之前加上其它二目运算符可构成复合赋值符。如

    +=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。构成复合赋值表达式的一般形式为: 变量 双目运算符=表达式 它等效于变量=变量 运算符 表达式 例如: a+=5 等价于a=a+5  x*=y+7 等价于x=x*(y+7)  r%=p 等价于r=r%p

    复合赋值符这种写法,对初学者可能不习惯,但十分有利于编译处理,能提高编译效率并产生质量较高的目标代码。逗号运算符和逗号表达式在

    逗号运算符

    C语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式, 称为逗号表达式。

    其一般形式为: 表达式1,表达式2 其求值过程是分别求两个表达式的值,并以表达式2的值作为整个逗号表达式的值。

    void main(){

    int a=2,b=4,c=6,x,y;

    x=a+b,y=b+c;

    printf("y=%d,x=%d",y,x);

    }

    a

    x

    本例中,y等于整个逗号表达式的值,也就是表达式2的值,x是第一个表达式的值。对于逗号表达式还要说明两点:

    1.逗号表达式一般形式中的表达式1和表达式2 也可以又是逗号表达式。例如: 表达式1,(表达式2,表达式3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:表达式1,表达式2,…表达式n 整个逗号表达式的值等于表达式n的值。

    2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值。

    3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。

    [Practice] //arithmeticint a,b,c;

    float d;

    a=11;

    b=235;

    c=a+b-a*b;

    d=(float)c/(float)a;

    a=c/a;'Vtable

    a,2,0

    b,2,0

    c,2,0

    d,4,0.0

    of Vtable

    'Vupdate

    1,0;2,0;3,0

    4,0.0

    1,11

    2,235

    3,-2339

    4,-212.636368

    1,-212

    of Vupdate

    of Practice

    [Practice] //1int a,b,c1,c2;

    a=25;

    b=3243;

    c1=b/a;

    c2=b%a;'Vtable

    a,2,0

    b,2,0

    c1,2,0

    c2,2,0

    of Vtable

    'Vupdate

    1,0;2,0;3,0;4,0

    1,25

    2,3243

    3,129

    4,18

    of Vupdate

    of Practice

    [Practice] //1int a,b,c;

    a=25;

    b=40;

    c=a+b,c+35;'Vtable

    a,2,0

    b,2,0

    c,2,0

    of Vtable

    'Vupdate

    1,0;2,0;3,0

    1,25

    2,40

    3,65

    of Vupdate

    of Practice

    小结

    1.C的数据类型

    基本类型,构造类型,指针类型,空类型

    2.基本类型的分类及特点

    类型说明符      字节       数值范围

    字符型char        1        C字符集

    基本整型int       2        -32768~32767

    短整型short int     2         -32768~32767

    长整型 long int     4      -214783648~214783647

    无符号型 unsigned    2        0~65535

    无符号长整型 unsigned long 4      0~4294967295

    单精度实型 float    4       3/4E-38~3/4E+38

    双精度实型 double   8       1/7E-308~1/7E+308

    3.常量后缀

    L或l 长整型

    U或u 无符号数

    F或f 浮点数

    4.常量类型

    整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。

    5.数据类型转换

    ·自动转换

    在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型向多字节类型转换。不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。

    ·强制转换

    由强制转换运算符完成转换。

    6.运算符优先级和结合性

    一般而言,单目运算符优先级较高,赋值运算符优先级低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、 赋值

    7.表达式

    表达式是由运算符连接常量、变量、函数所组成的式子。每个表达式都有一个值和类型。表达式求值按运算符的优先级和结合性所规定的顺序进行。

    更多相关内容
  • 运算符优先级

    2018-07-17 14:42:19
    包含了全部的C++运算符,内容非常详细,十分清晰,易懂。
  • 运算符优先级决定了表达式中运算执行的先后顺序,优先级越高的运算符会先执行。 运算符优先级 很多时候由于对运算符优先级的不确定,会用括号来确保表达式的执行顺序。如果搞清楚运算符的优先级,即使不用括号也能...
  • 夏宇闻 verilog 书中讲的运算符优先级不全,这里给出了较全的版本。
  • NULL 博文链接:https://rednaxelafx.iteye.com/blog/472113
  • 在 C 语言中,运算符的优先关系非常重要,如果没有了解其关系,当在一个公式内涉及多个数据的同时计算,就可能会因为弄错优先关系而导致错误的计算结果。
  • C++运算符优先级

    2014-08-29 15:42:37
    C++运算符优先级表,可供下载下载打印,十分方便
  • java代码-运算符优先级
  • C语言运算符优先级,同一优先级的运算符,运算次序由结合方向所决定。简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符
  • 本篇文章是对C语言中运算符优先级进行了详细的分析介绍,需要的朋友参考下
  • 运算符优先级

    千次阅读 2021-08-16 11:47:39
    运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。 一级运算符:...

    C语言中,运算符除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符。

    运算符的运算优先级共分为15 级,1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

    一级运算符:标识,常量,字符串文字量,优先级提升表达式最优先执行。

    二级运算符:数组下标运算(expression)、函数调用(argument-expression-list)、成员访问(identifier、 -> identifier)、后缀自增(i++)、后缀自减(i–)、 复合初始化(initializer-list)。

    三级运算符:前缀自增(++i)、前缀自减(–i)、单目转型表式式(取地址& ,提领 * , 正号+ ,负号-、 位反~ 逻辑否!)、求类型长度(sizeof unary-expression)。

    四级运算符:强制表达式成为type-name指定的类型( type-name ) cast-expression。

    五级运算符:“ * ” 乘法运算符。

    六级运算符:“ + ”加法运算符。

    七级运算符:<< 左移运算符;>> 右移运算符。

    八级运算符:<、<=、>、>=关系运算符。

    九级运算符:“ == ”等于运算符;“ != ”不等于运算符。

    十级运算符:“ & ”按位与运算符。

    十一级运算符:“ ∧ ”按位异或运算符。

    十二级运算符:“ | ”按位或运算符。

    十三级运算符:“&&”逻辑与运算符。

    十四级运算符:“ || ”逻辑或运算符。

    十五级运算符:? :条件运算符。
    在这里插入图片描述

    展开全文
  • c语言运算符优先级

    2019-03-19 21:08:18
    c运算符优先级, 优先级 运算符 名称或含义 使用形式 结合方向 说明
  • 运算符运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如!(逻辑取反运算符)或++...

    运算符

    运算符是可以通过给出的一或多个值(用编程行话来说,表达式)来产生另一个值(因而整个结构成为一个表达式)的东西。

    运算符可按照其能接受几个值来分组。一元运算符只能接受一个值,例如 !(逻辑取反运算符)或 ++(递增运算符)。 二元运算符可接受两个值,例如熟悉的算术运算符 +(加)和 -(减),大多数 PHP 运算符都是这种。最后是唯一的三元运算符 ? :,可接受三个值;通常就简单称之为“三元运算符”(尽管称之为条件运算符可能更合适)。

    运算符分类

    1、算数运算符

    2、赋值运算符

    3、位运算符

    4、比较运算符

    5、错误控制运算符

    6、执行运算符

    7、递增/递减运算符

    8、逻辑运算符

    9、字符串运算符

    10、数组运算符

    11、类型运算符

    运算符优先级

    运算符优先级指定了两个表达式绑定得有多“紧密”。例如,表达式 1 + 5 * 3 的结果是 16 而不是 18 是因为乘号(“*”)的优先级比加号(“+”)高。必要时可以用括号来强制改变优先级。例如:(1 + 5) * 3 的值为 18。

    如果运算符优先级相同,那运算符的结合方向决定了该如何运算。例如,"-"是左联的,那么 1 - 2 - 3 就等同于 (1 - 2) - 3 并且结果是 -4. 另外一方面,"="是右联的,所以 $a = $b = $c 等同于 $a = ($b = $c)。

    没有结合的相同优先级的运算符不能连在一起使用,例如 1 < 2 > 1 在PHP是不合法的。但另外一方面表达式 1 <= 1 == 1 是合法的, 因为 == 的优先级低于 <=。

    括号的使用,哪怕在不是必要的场合下,通过括号的配对来明确标明运算顺序,而非靠运算符优先级和结合性来决定,通常能够增加代码的可读性。

    下表按照优先级从高到低列出了运算符。同一行中的运算符具有相同优先级,此时它们的结合方向决定求值顺序。

    bc32cd9cbcdf2b31b03beeb4a5bce924.png

    变量查询,运算符优先级,if语句

    1.三个关联表的查询 use 新建 create table teacher(tcode int primary key,lesson char(10),age int,birth datetime) ...

    python运算符优先级

    下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...

    介绍python中运算符优先级

    下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合).这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符. ...

    修饰符的范围&plus;运算符优先级&plus;构造方法特点&plus;switch参数

    一.修饰符的范围 修饰符的范围,是否可访问: 类型 private 无修饰 protected public 同一类 是 是 是 是 同一包中的子类 否 是 是 是 同一包中的非子类 否 是 是 是 ...

    003-Python3-基础语法-运行方式、代码基础要求、运算符&lbrack;算数运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符、身份运算符&rsqb;、运算符优先级

    一.基础语法 参看地址:https://www.runoob.com/python3/python3-tutorial.html 1.1.运行方式 1.文件方式 编写一个hello.py文件, pri ...

    Python 运算符优先级

    这个表给出Python的运算符优先级(从低到高). 从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合). 这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上 ...

    Scala的运算符优先级:

    运算符优先级决定术语的表达式分组.这会影响一个表达式是如何进行计算.某些运算符的优先级高于其他;例如,乘法运算符的优先级比所述加法运算符优先级更高: 例如X =7 + 3* 2;这里,x 被赋值13, ...

    C语言运算符优先级

    优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- ...

    c&sol;c&plus;&plus;系列的运算符优先级总结

    经常写程序的时候,遇到运算符优先级的问题,令我汗颜的是,查书的次数挺多的……狠狠心,总结下.不过还要结合大量的编程实践来深入脑海. 1.首先永远忘不了的是,逗号运算符级别最低,毫无争议的还有()括起来 ...

    随机推荐

    P1546 最短网络 Agri-Net

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

    jquery ztree插件

    jquery json数据格式 操作tree数据 http://www.ztree.me/v3/main.php#_zTreeInfo

    display&colon;table- cell属性的练习

    display:table- cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以及其他现代浏览器都是支持此属性的,但是IE6/7只能对你说 sorry了,这一事实也是大大制 ...

    当chm文档点击左侧,右侧无内容时的解决方案

    右击chm文件->属性->安全选项卡,选择你登陆计算机的用户名,把权限改成完全控制就可以显示了

    Jquery 概念性内容编辑器

    概念性jQuery内容编辑器,这是一款非常有特色的jQuery编辑器,该编辑器支持文字.列表.视频.引用等功能,是一款小巧简洁,富有个性化的jQuery内容编辑器插件. 代码:

    python&lowbar;基础学习&lowbar;03&lowbar;正则替换文本(re&period;sub)

    python的正则表达式模块是re,替换相关的方法是sub. 例如我们要做如下的替换将所有的 替换为空格,可以通过下面代码实现: import re input = 'hello world' #第一 ...

    用php进行md5解密的源码,亲测可用

    性能秒杀log4net的NLogger日志组件&lpar;附测试代码与NLogger源码&rpar;

    NLogger特性: 一:不依赖于第三方插件和支持.net2.0 二:支持多线程高并发 三:读写双缓冲对列 四:自定义日志缓冲大小 五:支持即时触发刷盘机制 六:先按日期再按文件大小滚动Rolling ...

    python&comma;pip环境变量设置

    安装好python后,配置环境变量. 安装pygame需要先配置两个环境变量. 第一个是python的.先打开计算机,然后点击‘系统属性’然后点击‘高级系统设置’然后点击‘环境变量’在系统变量中找到p ...

    洛谷 P1015 回文数

    #include #include #include #include #includ ...

    展开全文
  • Python运算符优先级

    2022-06-11 16:46:23
    Python运算符优先级

    虽然本文讲的是Python,但其实它也适用于所有的编程语言。因为这里面蕴含着编程之魂。所以本文标题没有显著的使用Python关键词。当然以前的文章用了Python关键词是因为当时我并没有想到这一点,很多内容也适用所有编程语言。

    本文是运算符相关教程的最后一篇,将介绍运算符的最后一个汇总性的概念——运算符的优先级。

    优先级概述

    所谓优先级,是指优先计算的顺序。比如小学中我们学过的加减乘除基本四则运算,乘除要先于加减计算,因为乘除的优先级比加减要高。小括号拥有最高优先级,如果想先计算加减,可用小括号将其包围起来,在Python中也是如此,很显然,计算顺序不同,其结果也是不同的:

    相同优先级

    有些运算是互逆的,交换它们的位置不影响运算结果,所以区分它们的优先级是没有必要的,比如加和减(包括正号和负号)、乘和除、左移和右移、is与is not、in与not in。这些运算符都具有相同的优先级。

    当然,有些运算符交换位置会影响结果,但它们本身只是表示同一种算法的不同结果,难以区分不同的优先级。比如比较运算符中的等于、大于、小于、不等于、大于等于、小于等于都具有相同的优先级。

    需要特别注意的是,虽然Python支持诸如下例所示的连续的比较运算符:

    a > b == c

    但它其实是 a > b and b == c 的简略写法,而不是表示先进行计算 a > b ,然后用结果判断是否等于c,也不是判断a是否大于 b == c 的结果,下面的示例可以证明这点,无论哪个运算符先计算,其结果都与原始表达式结果不同,只有转换成两个表达式才一样(注:False等价于0,True等价于1):

    这一点,对于<等其他比较运算符,规则也是如此。

    当然,大多数运算符的优先级是不同的。

    结合性

    与运算符优先级相关的另一个重要概念是结合性,它决定了同一种运算符是从左往右计算,还是从右往左。下面是一个优秀的著名例子:

     它证明乘方运算的结合性是从右往左。

    大多数运算符都是从左往右开始计算的,简称左结合性。只有少部分运算符具有右结合性。下面是右结合性运算符列表:

    按位取反(位非)、正负号、位与、逻辑非、赋值系列运算符

    运算符优先级一览表

    其中上一行比下一行的优先级高,同一行表示优先级相同。在同一个表达式中,按照优先级从高到低依次计算,优先级相同则按照从左到右的顺序计算。同一类型的运算符则按结合性计算。

    注:其中@为矩阵乘法运算符,大多数资料中都没有记录此运算符。官方文档记录:“The @ (at) operator is intended to be used for matrix multiplication. No builtin Python types implement this operator.”(@(at)运算符打算用于矩阵乘法。没有任何内置的Python类型可以实现此操作符。)

    赋值系列运算符的优先级最低,比or还要低:

    另外赋值运算符支持连续的赋值,这和比较运算符类似,但其实也是相当于两个分开的赋值,与优先级无关:

    本表参考于Python3.7.3官方文档:

    Python3.10.4官方文档也一样,但是没有前者友好,顺序是相反的:

     运算符优先级重点说明

    运算符优先级的概念并不需要去刻意地记忆,如果对某个运算符的优先级不太确定,可以使用小括号将其包围起来。

    当然,记住一些重要的优先级概念,有助于对程序的阅读理解与编写维护。下面是一些重要的优先级:

    1. 小括号具有最高优先级。

    2. 运算符优先级按类别排序:算术 > 位 > 身份 >成员 > 比较 > 逻辑 > 赋值。 算术最高,赋值被低。位非运算符是个另外,它高于乘除。

    3. 身份、成员、比较、赋值运算符,同类中优先级相同。

    4. 算术运算符中:乘方最高,乘除整除取余次之,加减最低。

    5. 位运算符中:位非 > 左右移 > 位与 > 位异或 > 位或

    6. 逻辑运算符中:非最高,与次之,或最低。

    另外,我没有听说过任何编程语言有降低运算优先级——与小括号功能正好相反的运算符。这应该是没有必要的,因为根据相对性原理,给一个运算符最高优先级,就相当于给其他运算符最低优先级了,所以,如果想给一个运算符最低的优先级,可以将其余的运算符全部用小括号包围起来。

    最后,除了可以用于提高运算符的优先级之外,在Python中,小括号还有另外一个重要的功能——做为元组的定界符。

    身为Python特有的四大基本数据类型之一,元组(tuple)已经在本教程中出现过很多次了,在以后还会出现更多次,所以,下一篇将正式介绍元组。敬请关注。

    结语

    通过本文的编写,我意识到自己对Python的认知还有很大的局限——我刚刚才得知Python中有@矩阵乘法运算符!

    虽然我接触编程已有14年了,初识Python也有五六年了,使用Python编写的大大小小的程序工程也有近百个,但是如果不是今天对网上运算符优先级资料正确性的质疑,没有查看官方文档的话,不知道还要多少年之后才会得知这一点。

    我以前无论找到的与运算符相关还是运算符优先级相关的Python资料都没有提到@,这也说明网上绝大部分的资料的正确性也需要证明。比如关于乘方运算符的右结合性,网络上大多资料都错误的记录为左结合性。

    我写作这样的文章也很困难,因为我吹毛求疵的性格要求我必须写出全网独一无二的最优秀的精品内容,独一无二是很容易的,我的任何一篇文章都有自己独特的理解,并不是简单的对其他地方资料的搬运整合,最优秀就非常困难了,这不仅需要无私的分享精神,更需要卓越的洞察与理解能力,我正在朝这个方向努力。

    如果不能做到这一点,我觉得就没有写出来的必要,虽然我的文章点击率很低,但最近的文章都有近十分之一的阅读收藏率证明了读者对它的认可,这也是头条给予1万推荐的原因所在,否则至多100个推荐就到头了。

    另注:本教程首发于头条,百家号当时唯一一篇没有同步的,新形式教程的诞生还有一段时间,所以增补一下空档期。

    展开全文
  • 主要介绍了C++中的运算符和运算符优先级总结,主要整理了算术、关系、逻辑、位和赋值运算符的用法,需要的朋友可以参考下
  • c和c++运算符优先级

    2012-10-18 19:52:32
    c和c++运算符优先级, 方便参考
  • PHP 运算符优先级

    2021-04-22 19:18:56
    PHP 运算符优先级在接下来的时间里面,我们准备为大家继续介绍“PHP 运算符优先级”。(1) 目前,我们已经学习了PHP中的"算术"、"关系"、"逻辑"运算符,如果,当这些运算符同时出现在同一行代码时,那么,它们究竟谁...
  • 正则表达式 – 运算符优先级 正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。 相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的...
  • 优先级:就是当一个表达式中有多个运算符时,先计算谁,后计算谁。 运算符还有“目”和“结合性”的概念: “目”就是“眼睛”的意思,一个运算符需要几个数就叫“几目”。 那么“结合性”是什么呢? 优先级都是...
  • C语言中有很多运算符,除了四则运算,还有位运算、比较运算、逻辑运算、赋值运算等等,令人眼花缭乱的同时,优先级也让人头疼。通常建议在写代码的时候不用省略括号,但是并不... 您可能感兴趣的文章:C语言运算符优先级
  • 本文介绍了C语言中运算符优先级,并提供了背诵口诀,帮助读者快速掌握
  • 五、运算符优先级 根据需要点击目录可直接跳转。 一、算数运算符 算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加减乘除等。 表格中的例子中,变量a的值为 5,变量b的值为 3,变量i的值为 1: ...
  • System.out.println(false ^ true);//true System.out.println(true ^ false);//true System.out.println(true ^ true);//false System.out.println(false ^ false);//false ...运算符优先级...
  • 文章目录基本语法案例演示使用细节课堂练习运算符优先级小结: 基本语法 条件表达式 ? 表达式 1: 表达式 2; 1) 如果条件表达式为非 0 (真),运算后的结果是表达式 1; 2)如果条件表达式为 0 (假),运算后的结果是...
  • Java运算符优先级

    千次阅读 2021-08-12 17:15:51
    Java运算符优先级 ​ 每种同类型的运算符都有内部的运算符优先级,不同类型的运算符之间也有相应的优先级顺序。一个表达式中既可以包括相同类型的运算符,也可以包括不同类型的运算符或者函数。当多种运算符出现在同...
  • 在C#中,一共有38个常用的运用符,根据它们所执行运算的特点和它们的优先级,为了便于记忆,我将它们归为七个等级:1、单元运算符和括号。2、常规算术运算符。3、位移运算符。4、比较运算符。5、逻辑运算符。6、各种...
  • 一、关系运算符 和数学是一样,分别有:大于 > 、小于 < 、大于等于 >= 、小于等于 <= 、等于 == 、不等于 !=。因=号且作赋值符因此用两个=号作为 等于 号。 二、逻辑运算符 分别有:与运算符&&...
  • scala 运算符优先级

    2021-12-31 13:25:00
    优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 152,062
精华内容 60,824
关键字:

运算符的优先级