• python基础-运算符


    一、算术运算符

    • 加:+
    • 减:-
    • 乘:*
    • 除:/除尽 或 //取商
    • 模:%
    • 幂:**

    表达式两边可以是整型,浮点型,变量,字符串等,代码如下:

    print (1+2)   #int相加,结果为3
    print (4+3.1)  #int+float,结果为7.1
    print ('ab'+'c')   #str+str,结果为abc
    print (1-2)   #-1
    print (2*3)  #6
    print (10/3)  #除尽,结果为3.333
    print (10//3)  #取商,结果为3
    print (10%3)  #10除3余1,结果为1
    print (-10%3)  #-10除3商-4,余2,结果为2
    print (10%-3)  #10除-3商-4,余-2,结果为-2
    print (1.25%0.5)  #商2,余0.25,结果为0.25
    print (2**3)  #2的3次方,结果为8
    print ((-2)**3)  #-2的三次方,结果为-8
    print (-2**3)   #2的三次方取反,结果为-8
    print (16/2**3)   #16除8,结果是2,由此可以看出幂的优先级最高
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    负数除法:
    python对于负数做除法来说,采用的是向下取整的方式,如例子中,10除以-3,按照数学里的算法,结果是:商-3余1。但是python的运算结果是:商-4余-2,就是因为向下取整是商取最接近负无穷大的值,也就是-4。

    print (10//-3)  #-4
    print (-10//3)  #-4
    print (-10//-3)  #3
    print (15//-6)  #-3
    
    • 1
    • 2
    • 3
    • 4

    二、赋值运算符

    • =:等于
    • +=:加等于
    • -=:减等于
    • *= :乘等于
    • /=:除等于
    • //=:整除等于
    • %=:模等于
    • **=:幂等于

    上边这些运算符,我们以+=来讲解一下,例如:
    a+=1 等价于 a=a+1
    也就是a先加1,然后再赋值给a,代码如下:

    a=3
    a+=1
    print ('%d' % a)   #结果为4
    a-=1
    print (a)  #3
    a*=2
    print (a)  #6
    a//=3
    print (a)  #2
    a**=3
    print (a)  #8
    a%=3
    print (a)  #2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    python还支持链式赋值和系列解包赋值,如下代码:

    a=b=c=5   #链式赋值
    print (a,b,c)  #结果都是5
    
    x,y=1,2   #系列解包赋值
    print (x,y)   #1,2
    
    • 1
    • 2
    • 3
    • 4
    • 5

    三、关系运算符

    • 大于:>
    • 小于:<
    • 恒等于:==
    • 不等于:!=
    • 大于等于:>=
    • 小于等于:<=

    python中的关系运算符跟数学中一样的,只不过python是用布尔值表示结果的真与假,真用True,假用False。代码如下:

    print (3>2)   #True
    print (3<2)   #False
    print (3==2)   #False
    print (3==3)   #True
    print (3!=2)   #True
    print (3!=3)   #False
    print (3>=2)   #True
    print (3>=3)   #True
    print (3<=2)   #False
    print (3<=3)   #True
    print (4>3>2)  #True
    print (2<3<1#False
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四、逻辑运算符

    • 与运算:and
    • 或运算:or
    • 非运算:not

    逻辑运算符有3个,这三个运算符的结果也是布尔值,即True和False,真为True,假为False。那具体是怎么算的呢,我们通过举例的方式来了解一下。
    与运算:与运算的计算方式跟开关串联所得结果是一样的,我们看下图:

    在这里插入图片描述
    把1看做真,0看做假。通过上边的例子我们可以知道,开关全部闭合时,有电流通过,结果才为1,其余情况结果均为0。
    所以,运算有个口诀:真真为真,其余全假
    代码如下:

    print (3>2 and 3<5)  #1 and 1,结果为1,即True
    print (3>2 and 3>5)  #1 and 0,结果为0,即为False
    print (3<2 and 3<5)  #0 and 1,结果为0,即为False
    print (3<2 and 3>5)  #0 and 0,结果为0,即为False
    
    • 1
    • 2
    • 3
    • 4

    或运算:这个运算方式跟开关并联的结果是一样的,我们看例子:
    在这里插入图片描述
    通过上边电源开关的例子,我们了解到只要有开关闭合,则有电流通过,也就是只要有1,结果就是1。
    所以,运算的口诀是:有真为真,其余全假
    代码如下:

    print (3>2 or 3<5)  #1 or 1,结果为1,即True
    print (3>2 or 3>5)  #1 or 0,结果为1,即为True
    print (3<2 or 3<5)  #0 or 1,结果为1,即为True
    print (3<2 or 3>5)  #0 or 0,结果为0,即为False
    
    • 1
    • 2
    • 3
    • 4

    运算:这个运算结果是取反
    口诀是:非真为假,非假为真
    代码如下:

    print (not(3>2))   #3>2为True,取反,结果为False
    print (not(1))   #1默认为True,取反,结果为False
    print (not(0))   #0默认为False,取反,结果为True
    print (not(3<2))   #3>2为False,取反,结果为True
    
    • 1
    • 2
    • 3
    • 4

    上边是我们讲的3种逻辑运算符,但是,有两点需要非常注意的地方,那就是逻辑与跟逻辑或具有短路特性。
    短路与:and运算符一旦发现某一个表达式为False,就不运算后边的表达式了,因为已经知道整个表达式的结果为False。代码如下:

    print (3<2 and 3/0)   #结果为False
    #and右边的表达式3/0,不合法,因为0不能做除数
    #如果把这个表达式放在and左边,第一个做运算的话,会直接报错
    #但是,放在and右边,没报错,还把结果运行出来了
    #说明,根本没运行and右边的表达式,这即为短路与
    
    • 1
    • 2
    • 3
    • 4
    • 5

    短路或:or运算符一旦发现某一个表达式为True,就不运算后边的表达式了,因为已经知道整个表达式的结果为True。代码如下:

    print (3>2 or 3/0)   #结果为True
    #or左边的表达式为真,则右边的即使不合法,也不会被运行
    #这即为短路或
    
    • 1
    • 2
    • 3

    五、位运算符

    位运算符有4个,分别是:

    • 位与运算:&
    • 位或运算:|
    • 位异或运算:^
    • 位取反运算:~

    位与运算:是把十进制数选换成二进制后,按位进行与运算,如下:
    十进制10:0000 0000 0000 1010
    十进制12:0000 0000 0000 1100
    位与运算:0000 0000 0000 1000

    代码如下:

    print (10&12)   #结果是十进制8
    
    • 1

    位或运算:是把十进制数选换成二进制后,按位进行或运算,如下:
    十进制10:0000 0000 0000 1010
    十进制12:0000 0000 0000 1100
    位或运算:0000 0000 0000 1110
    代码如下:

    print (10|12)   #结果是十进制14
    
    • 1

    位异或运算:是把十进制数选换成二进制后,按位进行异或运算,相同的为0,不同的为1,如下:
    十进制10: 0000 0000 0000 1010
    十进制12: 0000 0000 0000 1100
    位异或运算: 0000 0000 0000 0110
    代码如下:

    print (10^12)    #结果是十进制6
    
    • 1

    位取反运算:是0的地方变成1,是1的地方变成0,如下:
    十进制10:0000 0000 0000 1010
    按位取反:1111 1111 1111 0101
    代码如下:

    print (~10)   #结果是-11
    
    • 1

    位移运算:是把十进制数选换成二进制后,按位左移或者右移,空位用0(负数用1补)补齐,如下:
    十进制3:0000 0011
    左移2位:0000 1100
    代码如下:

    print (3<<2)   #结果是12
    
    • 1

    十进制8:0000 1000
    右移2位:0000 0010
    代码如下:

    print (8>>2)   #结果是2
    
    • 1

    十进制-8:1111 1111 1111 1111 1111 1111 1111 1000
    右移2位: 1111 1111 1111 1111 1111 1111 1111 1110
    代码如下:

    print (-8>>2)   #结果是-2
    
    • 1

    备注:二进制中最高位是1的话,表示负数,是0表示正数,负数想要转换成十进制,需要参考补码的算法,如下:
    负数-8的补码:

    1. 取8的原码是:0000 1000
    2. 8的原码取反:1111 0111
    3. 再加1 :1111 1000

    上边第3步得到的结果就是-8的二进制。同样反推,想知道1011 0011这个二进制的十进制数,我们反着来一遍:

    1. 二进制:1011 0011
    2. 先减一:1011 0010
    3. 再取反:0100 1101
    4. 转十进制:77
    5. 加负号:-77
      最终结果是-77,我们用python验证一下即可。
    print (bin(-77))    #结果为-0b1001101
    
    • 1
  • 相关阅读:
    【微服务】SpringBoot整合Resilience4j使用详解
    数据结构——链表
    STM32个人笔记-定时器
    yii1 使用memcache 缓存不更新、过期时间不生效
    如何理解Linux下的文件描述符 ?以及Linux下的重定向与缓冲区这一概念???
    Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看
    亘古难题——前端开发or后端开发
    C++:GCC编译:GCC编译C++程序分步流程
    G1垃圾回收器在并发场景调优
    Jetson Orin平台4-16路 GMSL2/GSML1相机采集套件推荐
  • 原文地址:https://blog.csdn.net/qq_39568217/article/details/124267640