培训鉴定资源库

7种运算符优先级

【文章来源:】 【作者:】 【发布时间:2022-05-17】 【点击量:

图片1.jpg

一、运算

1、算数运算符(7种)

+ - * /

%  (取余数,注意负数的取余,要根据除数的正负,来套用公式判断余数是多少,如果被除数和除数都是负数,就在正常结果前面加上负号)

** (幂运算、次方)

// (地板除,取整除)

2、比较运算符(6)

==  =是赋值;==是比较)

=

>    <    >=    <=  

3、赋值运算符

=    +=    -=    *=    /=    %=    **=    //=    :=(py3.8 ,可在表达式内部为变量赋值)

4、位运算符[将数字看做二进制来进行计算]

"""

5、位运算符

假设  a=60b=13

1&

描述:按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0   实例:(a & b) 输出结果 12 ,二进制解释: 0000 1100

2|

描述:按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1   实例:(a | b) 输出结果 61 ,二进制解释: 0011 1101

  (3^

描述:按位异或运算符:当两对应的二进位相异时,结果为1   实例:(a ^ b) 输出结果 49 ,二进制解释: 0011 0001

4)~

描述:按位取反运算符:对数据的每个二进制位取反,即把1变为0,0变为1 ~x 类似于 -x-1   实例:(~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。注意python没有无符号右移操作,所以需要越界检查.

5<<

描述:左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0,数值上乘以2的若干次幂;   实例:a << 2 输出结果 240 ,二进制解释: 1111 0000。注意python没有无符号右移操作,所以需要越界检查.

6>>

描述:右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数,低位丢弃,高位补0,数值上地板除以2的若干次幂;   实例:a >> 2 输出结果 15 ,二进制解释: 0000 1111。注意python没有无符号右移操作,所以需要越界检查.

例如:

a = 15   b = 8

a = 0000 1111

b = 0000 1000

a&b = 0000 1000  # 8

a|b = 0000 1111  # 15

a^b = 0000 0111  # 7

~a  = 1001 0000  # -16

var = 15

原码:  0000 1111

反码:  0000 1111

补码:  0000 1111

按位非:1111 0000

补码:  1111 0000

反码:  1000 1111

原码:  1001 0000 # -16

res = 5 << 3 # 5*23次幂  40

res = 28 >> 3 # 28//23次幂 3

"""

& 按位与  # 对应位同11,否则为0

| 按位或  # 对应位有11

^ 按位异或 # 对应位相异为1,相同为0

~ 按位取反 # 针对于补码进行操作,按位取反,包括符号位  公式 -n+1

<< 左移  # 实现乘法操作

>> 右移  # 实现除法操作

6、逻辑运算符

1and

逻辑表达式:x and y   描述:布尔"" --- 如果 x Falsex and y 返回 False,否则它返回 y 的计算值。

2or

逻辑表达式:x or y   描述:布尔"" --- 如果 x 是非 0(判断xTrue),它返回 x 的值,否则它返回 y 的计算值。

3not

逻辑表达式:not x   描述:布尔"" --- 如果 x True,返回 False 。如果 x False,它返回 True

例题:求1+2+3+...+n,要求不能使用乘法,whileforifelseswitchcase等。

def get_n_sum(n):

    if n<2:

        return n    

    s=n

   return s and s+get_n_sum(n-1)  # 如果s!=0,则执行后面的运算,否则不执行后面的运算

逻辑运算的优先级:

**( )> not > and > or**

res = 5 or 6 and 7  # 5

res = (5 or 6) and 7 # 7

res = not(5 or 6) and 7 # False

res = 1 > 2 or 3 < 4 and 5 > 10 or 11 < 12 and 13 > 16 # False

res = False or True and False or True and False

res = False or False or False

res = False

逻辑短路现象:

>>> True or print(111)  or 一真则真 直接输出第一个真的,后面不执行了

True

>>> False and print(111) and 一假则假

False

print(111) or True  # print是内置的函数,函数内部返回的是None,功能是打印,这两者并不冲突

7、成员运算符 [针对于容器型数据]

in  判断序列中有没有某值

not in

8、身份运算符

is  判断两个标识符是不是引用自一个对象

is not 检测两个数据在内存中是不是同一个值

二、总结

1、个别运算符

优先级最高的是** 幂运算

优先级最低的是= 赋值运算

)可以提升运算的优先级

2、整体来讲 一元运算符 > 二元运算符

一元运算符: 同一时间只操作一个值 - ~

二元运算符: 同一时间操作两个值 + - * /

3、同一层级

逻辑: > not > and > or

算数: 乘除 > 加减

位运算: << >> > & > ^ > |

4、其他情况:

算位比身成逻,赋值运算收尾(赋值运算符用来将算好的值赋值给等号左侧变量,做收尾工作)

算术运算符(±*/> 位运算符(&^|<<>>) > 比较运算符(=<>>=<=) > 身份运算符(is isnot) > 成员运算符(in notin) > 逻辑运算符(and or not)

res = 5 + 5 << 6 // 3 is 40 and False

res = 5 + 5) << (6 // 3) is 40 and False

10 << 2 is 40 and True

40 is 40 and True

True and True

True


上一条:10道程序题

下一条:3个函数的使用

Baidu
map