運算符:有特殊計算規則的符号
參與運算的資料:操作數
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次幂
二、比較運算符(關系運算符)
傳回布爾類型:布爾類型(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)–傳回對象的記憶體位址
輸出: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")
輸出:
abc
3
abc
對于and而言,如果第一個表達式為False,則會列印第一個表達式,因為第一個表達式已經決定了整個表達式的值,否則列印第二個表達式
對于or而言,如果第一個表達式為Ture,則會列印第二個表達式,因為整個表達式的值取取決于第二個表達式,否則列印第一個表達式
輸出:
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
輸出:
-0b1
4)~ 按位取反,包括符号位
輸出:
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