zoukankan      html  css  js  c++  java
  • 运算符 Operator 及优先级

    算数运算符

    • +  -  *  /  **  %
    • /表示自然除,结果是浮点数。//为整除。python2.x版本/和//都是整除。

    用法举例

    In [4]: 1+1
    Out[4]: 2
    
    In [5]: 2*2
    Out[5]: 4
    
    # 自然除
    In [8]: 10 / 3
    Out[8]: 3.3333333333333335
    
    # 整除,向下圆整
    In [9]: 10 // 3
    Out[9]: 3
    
    In [14]: -10 // 3
    Out[14]: -4
    
    # 取模,公式 x % y等价 x- ((x // y) * y)
    In [10]: 10 % 3
    Out[10]: 1
    
    In [11]: -10 % 3
    Out[11]: 2
    
    In [13]: -10 % -3
    Out[13]: -1

    幂预算(由于乘方运算比求负(单目减)的优先级高,所以-3**2等价 -(3**2))

    In [15]: 3 **2
    Out[15]: 9
    
    In [16]: -3**2
    Out[16]: -9
    
    In [17]: (-3)**2
    Out[17]: 9

    位运算符

    • & | ~ ^ << >>
    • << 和 >> 的运算:乘除2的整数倍。例如:16>>2 相当于 16//2**2 , 4<<2 相当于4*2**2

    &位与

    In [32]: 2 & 3
    Out[32]: 2
    
    In [35]: -2 & -3
    Out[35]: -4

    原理:计算中的数据都是以补码的形式存在的,据说稳定

    -3 
    源:10000011
    反:11111100
    补:11111101
    
    -2
    源:10000010
    反:11111101
    补:11111110
    
    位与:补码相同位保留,不同位为0,然后取补码的源码
    补:11111100
    补码取反:10000011
    末位加1:10000100

    ~取反

    In [36]: ~2
    Out[36]: -3

    ^异或

    相同位取零,不同为相加

    In [42]: 3 ^5
    Out[42]: 6
    
    In [43]: 3 ^ 2
    Out[43]: 1

    |位或

    相当于取并集

    In [46]: 8|5
    Out[46]: 13
    
    In [47]: 3|2
    Out[47]: 3

    >>和<<

    In [48]: 8 >>1
    Out[48]: 4
    
    In [49]: 8 >>2
    Out[49]: 2
    
    In [50]: 8 <<2
    Out[50]: 32
    
    In [51]: 8 <<1
    Out[51]: 16

    比较运算符

    • ==    !=    >    <   >=   <= 返回boolean值 
    • 链式比较操作 4>x >=2 

    逻辑运算符

    • 与 或 非 and or not
    • 短路:
      1. and 如果第一个表达式为False,后面不用计算了,都为False,可以将and看作是做“乘法运算“。
      2. or 如果第一个表达式返回True,后面不用计算了,都为True,可以将or看作是做“加法运算”。

    赋值运算符

    • 等号:a = 5
    • +=   -=  *=  /=  %=
    • x = y = z = 1

    成员运算符

    • in、not in

    身份运算符

    • is、 is not

    运算符优先级(由高到低)

    运算符  描述
    'expr' 字符串转换
    {key:expr,...} 字典
    [expr1,expr2...] 列表
    (expr1,expr2,...) 元组
    function(expr,expr2,...) 函数调用
    x[start:stop:step] 切片
    x[index] 下标索引取值
    x.attribute 属性引用
    ~x 按位取反
    +x, -x 正,负
    x**y
    x*y, x/y, x%y

    乘,除,取模

    x+y, x-y

    加,减

    x << y, x>>y 位移
    x&y 按位与
    x^y 按位异或
    x|y 按位或

    x < y, x <= y, x==y,

    x!=y, x>=y, x>y

    比较
    x is y, x is not y 等同测试
    x in y, x not in y 成员判断
    not x 逻辑否
    x and y 逻辑与
    x or y 逻辑或
    lambda arg,....:expr Lambda匿名函数

    优先级:算数运算符 > 位运算符 > 身份运算符 > 成员运算符 > 逻辑运算符

    逻辑与或和按位与或的区别:

      1、相似点:

        逻辑与和按位与的执行结果是一样的;逻辑或和按位或的执行结果也是一样的。

      2、不同点:

        逻辑与和逻辑或执行时,只需要判断第一个条件的真假就能得出整个条件的真假,不需要判断第二个条件;

        按位与和按位或执行时,需要判断第一个条件的真假就能得出整个条件的真假,但是还需要对后面的条件进行判断,并且最后把这些条件的结果结合起来才返回 整个条件的真假。

      由此看来,逻辑与或的执行效率比按位与或的效率高

  • 相关阅读:
    原码、反码、补码以及为什么要用反码和补码
    Linux中的段管理,bss段,data段,
    关于SRAM,DRAM,SDRAM,以及NORFLASH,NANDFLASH
    S3C2440的GPIO
    剑指offer——二叉搜索树与双向链表
    剑指offer——平衡二叉树
    ***剑指offer——字符串的排列(不会)
    剑指offer——两个链表的第一个公共结点
    剑指offer——数组中只出现一次的数字
    剑指offer——最小的K个数
  • 原文地址:https://www.cnblogs.com/zh-dream/p/11671628.html
Copyright © 2011-2022 走看看