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,由此可以看出幂的优先级最高

负数除法:
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

二、赋值运算符

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

上边这些运算符,我们以+=来讲解一下,例如:
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

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

a=b=c=5   #链式赋值
print (a,b,c)  #结果都是5

x,y=1,2   #系列解包赋值
print (x,y)   #1,2

三、关系运算符

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

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

四、逻辑运算符

  • 与运算: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,结果就是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

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

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

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

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

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

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

五、位运算符

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

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

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

代码如下:

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

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

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

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

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

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

print (~10)   #结果是-11

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

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

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

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

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

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

备注:二进制中最高位是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
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值