Python学习3--运算符

运算符:有特殊计算规则的符号
参与运算的数据:操作数
N元运算符:取决于使用的操作数的数量。
运算符和操作数结合起来----表达式

一、 算数运算符

+(加) -(减) *(乘) /(除) % (取余) //(整除) **(幂)

1、整除(//)
商是向下取整(即往数小的方向取)
注意-10//3和int(-3.3)的区别:int是向0取整,相当于舍掉小数点

print(10//3)
print(-10//3)
print(int(-3.3))

输出结果是:
3
-4
-3

2、取模(%)
注意:商向下取整(即往数小的方向取)
计算原理:余数 = 被除数-商*除数

print(10%3)
print(10%-3)
print(-10%3)
print(-10%-3)

结果分别为:1、-2、2、-1
计算过程如下:
在这里插入图片描述
总结可知:取模运算的符号和除数的符号一致 且结果是整型

3、取余
格式为math.fmod 取余运算:商向0取整 且结果是浮点数

import math
print(math.fmod(10,3))
print(math.fmod(10,-3))
print(math.fmod(-10,3))
print(math.fmod(-10,-3))

结果是:1.0 1.0 -1.0 -1.0
在这里插入图片描述
总结可知:取余的结果符号和被除数的符号一致

4、求幂 mn=m的n次幂

print(2**4)

二、比较运算符(关系运算符)

返回布尔类型:布尔类型(True False)
== 内容相等 != 内容不等 >大于 <小于 >= <=

对于所有的数据类型来说,内容相等 == 返回True,对象不一定相等
数值、字符串、字节:== 和is几乎一样。
支持链式比较,如以下格式:

print(1<x<5)
print(1<x>5)

链式比较也支持短路,按从左到右的顺序,先比较第一个表达式,
如果第一个表达式返回False,则后面的比较不再进行 相当于and操作符

3. 身份运算符

is is not
is代表对象是否是一个(内存地址是否是一个)

Is如果是True。==一定是 True
==是True , is不一定是True

a = 1
b = 1
print(a == b,a is b)

输出结果为True,True
id(o)–返回对象的内存地址

print(id(a),id(b))

输出:1927965760 1927965760
做如下测试:

a = 1
b = 1
c = a
print(a == b, a == c,b == c)
print(a is b,a is c,b is c)

li1 = []
li2 = []
li3 = li2
print(li1 == li2,li1 == li3,li2 == li3)
print(li1 is li2,li1 is li3,li2 is li3)

结果为:
True True True
True True True
True True True
False False True

总结为:对于数值、字符串、字节这种不可变类型(基于内存的类型)来说,相同的内容是同一个对象

四、 逻辑运算符

1、返回值:布尔类型,也可能是计算值
and(与 ),x and y: 如果x和y同时为True,则返回值为True
or(或) ,x or y: 如果x和y中有任意一个为True, 则返回值为True
not(非): 原来True not x ,结果变为False

2、短路现象
and: 第一个表达式为False的时候,第二个表达式不再执行
or ; 第一个表达式为True,第二个表达式不再执行

False and print("and 测试t")
False or print("or 测试t")

输出:
or 测试t

3、返回计算值
1、and或者or运算符左右两侧都是True、False(都是布尔表达式);
2、and 和or左右两侧是其他类型
如下:

print(0 and "abc")
print(3 and "abc")
print(3 or "abc")
print(0 or "abc")

输出:
0
abc
3
abc

对于and而言,如果第一个表达式为False,则会打印第一个表达式,因为第一个表达式已经决定了整个表达式的值,否则打印第二个表达式
对于or而言,如果第一个表达式为Ture,则会打印第二个表达式,因为整个表达式的值取取决于第二个表达式,否则打印第一个表达式

print(False or print("False-aaaa"))

输出:
False-aaaa
None

由于or的左侧为False无法决定整个表达式的值,所以会执行print语句,同时print语句的返回值是None,所以打印None

五、位运算符

1、概述
正数:原码反码补码都是相同 ,都是二进制原码

对于负数
原码:正数的二进制码,最高位取1
反码:除符号位以外,其余取反
补码:反码+1
把补码变回原码:取反码+1

计算机中存储以及运算过程的全部都是补码
运算也全部都是使用补码进行运算,所以要注意,运算的结果,最高位如果是1,一定要计算原码

位运算符:
&(位与)  : 都是1的时候,结果为1
| (位或) :都是0的时候,结果为0
^ (异或) :都一样的时候为0,不一样为1
~(取反) : 包括符号位一起取反

2、为何需要补码

在这里插入图片描述
如上表所示:以1+(-1)为例:
在这里插入图片描述
3、位运算
1)& 按位与 如果都是1,返回1,否则返回0

a=0b10011
b=0b01101
print(bin(a&b))

输出:
0b1
运算过程:
在这里插入图片描述
可以用位与0b1111来显示补码,如:

print(bin(2&0b1111))
print(bin(-2&0b1111))

输出:
0b10
0b1110

任意一个数跟-1与运算得到的是自身,如:

print(-20&-1)
print(20&-1)

输出:
-20
20

可自行手写运算,需注意的是,负数要用补码进行运算,如果得到结果是负数,还需通过反码加1的运算得到原码才是结果。

2)|按位或 如果都是0,返回0,否则返回1

a=0b10011
b=0b01101
print(bin(a|b))

输出:
0b11111

3)^异或:相同为0 不同为1

print(bin(2^-3))

输出:
-0b1

4)~ 按位取反,包括符号位

print(bin(~-1))

输出:
0b0

5)<< 左位移 右侧以0填充,左侧在64位机上不会溢出
左位移一位,相当于*2

a =15
print(a<<1)
b = -15
print(b<<1)

输出:
30
-30

6)>> 右位移 最高位正数填充0,负数填充1
如果能够整除,则相当于 /2,如果不能整除,相当于/2后向下取整

a=15
print(15>>1)
b=-15
print(-15>>1)

输出:
7
-8

六、赋值运算符

= ; +=; -=; *=; /=; %=; **=

七、 成员运算符

in、not in: 判断元素是否在序列中
返回值,布尔类型

s = "abc"
print("a" in s)
print("ab" in s)
print("abc" in s)

输出:
True
True
True

八、运算符的优先级

算数运算符> 比较运算符 >逻辑运算符 >其他运算符 > 赋值运算符
可以用()调整优先级,python中没有[] 也没有{}
计算机中的运算符,做运算的时候 ,体现的是结合性,不是运算性

y=1==3 or 2==2
print(y)

输出:
True

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值