第三章 運算符

       運算符

定義:有特殊計算規則的符號
> 操作數: 參與運算的數據
> 運算符: n元運算符,取決於操作數的數量
> 表達式: 操作數和運算符的結合

一、 算數運算符

+ - * /     //、  **、  %、
//(地板除)
% (取模) --- <被除數 - 商(向下取整)*除數>,在負數是和取餘不同
# 取模運算符號和除數相同

**(乘冪)

        import math
math.fmod() --- 取餘(結果爲浮點類型,結果符號和被除數相同)

eg.
		# 地板除 
		(-10//3) --- -4
		(10//3)  ---  3
		(10%3)   ---  1
		(-10%3)  ---  2
		# 取餘 - 看被除數
		math.fmod(-10, -3)  --- -1.0
		math.fmod(-10,  3)  --- -1.0
		math.fmod(10,  -3)  ---  1.0
		# 取模 - 看除數
		-10%-3             --- -1
		 10%-3             --- -1
		-10% 3             ---  1

####專題,取整方向


二、比較運算符(關係運算符)

1. 常見比較符

> 主要有:== > < >= <= != 
> 返回值爲布爾類型
> == 用於判斷內容是否相等,對象不一定相等
數值、字符串、字節、元組一般是同一對象

2. 鏈式比較

                (支持短路比較、可以不同向)

1>3>'a' --- 此處前面部分返回False,後面不在比較
1<3>7

三、 身份比較符

> is / is not
> 可以使用id()查看對象內存地址 
> 數值、字符串、字節、元組,相同內容使用同一對象
    列表、字典、集合,同一內容也創建不同對象
  

四、 邏輯運算符

> 與and 、或or、 非 not
> 返回值可能是布爾類型,可能是計算值

1. 運算符兩側都是布爾表達式
2. 運算符兩側是其他類型
> 返回兩個表達式中的一個
> and如果第一個表達式是True,那麼返回第二個表達式;
否則返回第一個表達式;
> or 如果第一個表達式是True,那麼返回第一個表達式;
否則返回第二個表達式;
# 返回表達式示例
print(3 and 'abc') --- 'abc'
print(0 or  'abc') --- 'abc'
3. 短路現象
> 如果and表達式第一個爲False,或者or第一個表達式爲True,不執行第二個表達式
> and 優先級高於 or
        
    #後面表達式是None,整體打印None
    print(True and print('Pitfall')) 
    # 證明優先級
    print( 1 or 1  and 0)
    print((1 or 1) and 0)
    print( 1 or(1  and 0), end= '\n-------------------------\n')
    # 證明短路
    print( 0 and print('我被沒有被短路'))
    print( 1 or  print('我被沒有被短路'))

五、 位運算符

返回值:十進制數

1. 原碼,反碼,補碼

> n位機可以儲存到的最大數:2**(n-1)-1
> 正數:原碼、反碼、補碼都是二進制碼
  負數:原碼 --- 二進制碼,最高位取1
反碼 --- 除符號位,其餘取反
補碼 --- 反碼+1
> 計算機以補碼存儲數據,所有的運算都使用補碼

> 補碼轉原碼:取反加一(取反和+1不分先後)


> 原碼的顯示 --- 和-1與運算

> 補碼的顯示 --- 和0b11111111與運算

print(bin(value&-1))

2. 位運算符

# 手工計算時,取反、異或結果可以使用計算機,估計使用幾位機
(1) & 按位與 如果都是1返回1,否則返回0;
(2) | 按位或 如果存在1返回1,否則返回0;
(3) ^ 按位異或 不同爲1,相同爲0;
(4) ~ 按位取反 包括符號全部取反
(5) << 左位移 右側用0填充,左側如果溢出會影響結果
不溢出的前提下相當於該數值乘以2 --- 計算機不會溢出的
(6) >> 右位移    符號位正數填充0,負數填充1,最右側刪除

如果能整除,除以二;不能整除則向下取整(//)

# 1. 手工計算-27的二進制原碼、反碼,補碼。使用程序輸出-27的二進制碼,想辦法輸出補碼的顯示。驗證是否正確
def que1():
    # 手工計算
    print('''
    十進制:    -27         -10         
    原碼:      10011011   10001010
    補碼:      11100101   11110110
    ''')
    # 驗證
    num = int(input('請輸入一個整數:'))
    print('{}的補碼是{}'.format(num, bin(num&0b11111111)))
    print('{}的原碼是{}'.format(num, bin(num & -1)))
# que1()

運行結果:

    十進制:    -27         -10         
    原碼:      10011011   10001010
    補碼:      11100101   11110110
    
請輸入一個整數:-27
-27的補碼是0b11100101
-27的原碼是-0b11011

六、賦值運算符

= 、+=(+可以用-,*,/等替代)

七、成員運算符

in  、not in


八、運算符優先級

1. 算數運算符 > 比較運算符 > 邏輯運算符 > 賦值運算符
2. ()可以調節優先級
3. 比較運算符中,and優先級高於or



發佈了55 篇原創文章 · 獲贊 28 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章