zoukankan      html  css  js  c++  java
  • 算数运算符、比较运算符、赋值运算符、成员运算符、身份运算符、逻辑运算符、位运算符

    1、算数运算符(+、-、*、/、//、%、**)

    (1)+、-、*、/   (注意:除法运算的出来的结果是float类型,除不尽的情况下保留15-18位小数

    # (1) + 运算
    a = 10
    b = 20
    print(a+b) # 30
    
    # (2) - 运算
    print(a - b) # -10
    
    # (3) * 运算
    print(a*b) # 200
    
    # (4) / 运算  注意:除法运算的出来的结果是float类型,除不尽的情况下保留15-18位小数
    print(10/5) # 2.0
    print(5/10) # 0.5
    print(10/3) # 3.3333333333333335

    (2)//(地板除,保留整数)、%(取余数)、**(次幂计算)  注意:在取余运算中,若除数或者被除数只要有一个是浮点数,则返回浮点数。当被除数小于除数时,结果直接取被除数就好

    # (5) // 运算 (地板除,直接取结果的整数部分
    res1 = 5//3.0
    print(res1,type(res1)) # 1.0 <class 'float'>  
    res2 = 5//4
    print(res2,type(res2)) # 1 <class 'int'>
    res3 = 5//6
    print(res3,type(res3)) # 0 <class 'int'>
    
    # (6) % 运算  (取余) 注意:当被除数小于除数时,结果直接取被除数就好
    res4 = 5%4
    print(res4,type(res4)) # 1 <class 'int'>
    res5 = 5%5
    print(res5,type(res5)) # 0 <class 'int'>
    res6 = 5%6
    print(res6,type(res6)) # 5 <class 'int'>
    res7 = 5%10
    print(res7,type(res7)) # 5 <class 'int'>
    print(10%-3) #-2 1+(-3)=-2 #当除数或者被除数有一方为负数时
    print(-10%3) #2 -1+3 =2
    # (7) ** 运算
    res8 = 7**2
    print(res8) # 49
    res9 = 4**-1
    print(res9) # 0.25

    2)比较运算符:>、>=、<、<=、==、!=(比较运算符结果均为bool值)

    # (1) > 运算
    print(20>10) # True
    print(20>20) # False
    
    # (2) >= 运算
    print(20>=20) # True
    print(30>=20) # True
    
    # (3) < 运算
    print(10<20) # True
    print(20<20) # False
    
    # (4) <= 运算
    print(20<=20) # True
    print(10<20) # True
    
    # (5) == 运算  判断两个值是否一样
    print(20 == 20) # True
    print(19 == 20) # False
    print("值相等"=="值相等") # True
    
    # (6) != 运算 判断两个值不一样
    print(20!=19) # True
    print(20!=20) # False
    print("我是1"!="我是2") # True

    (3)赋值运算符:=、+=、-=、*=、/=、//=、%=、**=

    # (1) = 赋值
    a = 10 # 将10赋值给a
    
    # (2) += 运算
    a = 10
    b = 20
    a += b
    print(a) # 30  将a和b相加后赋值给a
    
    # (3) -= 运算
    a = 10
    b = 20
    a -= b
    print(a) # -10  将a减去b后再赋值给a
    
    # (4) *=运算
    a = 10
    b = 20
    a *= b
    print(a) # 200  将a和b相乘后再赋值给a
    
    # (5) /= 运算
    a = 10
    b = 20
    a /= b
    print(a) # 0.5 将a除b的结果再赋值给a
    
    # (6) //= 运算
    a = 10
    b = 20
    a //= b
    print(a) # 0 将a除b的整数部分再赋值给a
    
    # (7) %= 运算
    a = 10
    b = 20
    a %= b
    print(a) # 10
    
    # (8) **=运算
    a = 10
    b = 2
    a **= b
    print(a) # 100 

    (4)成员运算符:in、not in 成员运算符仅针对于容器类型(返回值均为bool值)

    s1 = "我有一个大家庭"
    list1 = ["","一个","","家庭"]
    tuple1 = ("","一个","","家庭")
    set1 = {"","一个","","家庭"}
    dict1 = {"":"一个","":"家庭"}
    print(""in s1) # True
    print(""in list1) # False
    print("" in s1) # True
    print("" in tuple1) # False 对于list、tuple、set、dict来说,必须是连续的字符来判断
    print("家庭" in set1) # True
    print("家庭" in dict1) # False 对于字典来说,判断的值须是字典的key
    print("" in dict1) # True

    (5)身份运算符:is、is not  (判断两个值的id是否一样,返回值均为bool值)

    a = 20
    b = 20
    print(a is b,id(a),id(b)) # True 1554285264 1554285264
    
    a = -10
    b = -10
    print(a is b,id(a),id(b)) # False 2903910697712 2903910697456
    
    a = "我是一个字符串"
    b = "我是一个字符串"
    print(a is not b,id(a),id(b)) # False 2157711342296 2157711342296

    (6)逻辑运算符:not、and、or

       6.1) 运算优先级顺序:() > not > and > or

    # (1) not 运算:非运算
    a = 10
    print(not a) # False
    
    # (2) and 运算:与运算,须式子里的条件都为真,都真为真,一假为假
    print(8 and 9) # 9
    print(0 and 9) # 0
    print(3<4 and 5<4) # False
    print(3<4 and 5<6) # True
    
    # (3) or 运算:或运算,式子中有一个条件为真则是真,一真为真,都假为假
    print(8 or 9) # 8
    print(0 or 9) # 9
    print(3<4 or 5<4) # True
    print(3>4 or 5>6) # False
    
    res = 3 < 4 and False or 7 > 8 and True and (3 and 8)
    # True and False or False and True and True
    #False or False
    # False
    print(res) # False

      6.2) 短路原则:

            如果在and运算中,and前面的条件已经为False了,则值一定为False。在or运算中,如果or前面的条件为True,则结果一定为True

            出现了短路运算,后面的代码就不执行了

    (7)位运算符:&、|、^、~、<<、>>

    # (1) & 按位与运算:将参与运算的值转为二进制,如果两个值对应的数都为1,则结果对应的值为1,否则为0
    a = 5 # 二进制为 000...00101
    b = 3 # 二进制为 000...00011
            #   a&b 000...00001
    print(a&b) # 1
    
    # (2) | 按位或运算:只要对应的两个二进制有一个是1时,结果位就为1,否则为0
    a = 5 # 二进制为 000...00101
    b = 3 # 二进制为 000...00011
             #a|b    000...00111
    print(a|b) # 7
    
    # (3) ^ 按位异或运算符:当两个值对应的二进制一样时,结果为0,否则为1
    a = 5 # 二进制为 000...00101
    b = 3 # 二进制为 000...00011
             # a^b  000...00110
    print(a^b) # 6
    
    # (4) << 左移:值的二进制左移若干位,高位丢弃,低位补0,左移相当于做乘法,值*2的n次幂
    a = 5<<4
    """
    5的二进制为 000...00101,向左移4位,000...01010000得到80,按照公式5*2^4=80
    """
    print(a) # 80
    
    # (5) >> 右移 值的二进制右移若干位,右移相当于除法,值//2的n次幂
    a = 5>>2
    """
    5的二进制为 000...00101,向右移2位,000...00001得到1,按照公式5//2^2
    """
    print(a) # 1
    
    # (6) ~ 按位非运算符,针对于原值的补码操作,按照原值的补码取反,包括符号位得到按位非的原码。公式 -(n+1)
    a = ~5
    """
    5的二进制为 000...00101,
    按位非码为  111...11010
    按位非反码  111...11001,
    按位非原码  100...00110
    得-6
    """
    print(a)
    
    a = ~(-5)
    """
    -5的二进制为100...00101,-5的反码为111...11010,-5的补码为111...11011
    得按非位的补码为000...00100
    得按非位的反码为000...00100
    得按非位的原码为000...00100
    得4
    """
    print(a) # 4

    (8)总结

    个别运算符:优先级最高的是**运算

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

                       ()可以提升优先顺序

    整体:一元运算符>二级运算符

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

           二元运算符:同一时间操作两个运算符

    同一层级:

                   算术:乘除>加减

                   逻辑:()>not>and>or

                   位运算:(<<、>>)>&>^>|

    其他情况:算术>位>比较>身份>成员>逻辑(算位比身成逻)

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/fdsimin/p/12827279.html
Copyright © 2011-2022 走看看