位運算/運算符優先級


一、位運算

位運算

描述

示例

&

按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

(a & b)輸出結果12,二進制解釋:0000 1100

|

按位或運算符:只要對應的兩個二進制位1時,結果位就為1

(a | b)輸出結果61,二進制解釋:0011 1101

^

按位異或運算符:當兩對應的二進制相異時,結果為1

a ^ b)輸出結果49,二進制解釋:0011 0001

~

按位取反運算符:對數據的每個二進制取反,把1變為0,把0變為1,~x類似於-x-1

(~a )輸出結果-61.二進制解釋:1100 0011,在一個有符號二進制數的補碼形式

<<

左移動運算符:運算符的各二進制全部左移若干位,由<<右邊的數字指定了移動的位數,高位丟棄,低位補0

a << 2輸出結果240,二進制解釋:1111 0000

>>

右移動運算符:把>>左邊的運算數的各二進制位全部右移若干位,>>右邊的數字指定了移動的位數

a >> 2輸出結果15,二進制解釋:0000 1111

 

位運算:針對二進制進行的運算

&   |   ^   ~  <<    >>

 

 

Ture and Ture  ------>Ture

False and False------>False

&:

按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0

當二進制有重合時,結果時保留重合那部分的數值

1 為真   0 為假

n1 = 0b0110   #6

n2 = 0b0010   #2

print(n1 & n2)

 

0&0 ------> 0

1&1 ------> 1

1&0 ------> 0

0&1 ------> 0

nl 
168 
n2 = # 2 
169 
print(nl & n2) 
17î 
print(5 & 9) 
171 
172 
1 
173 
1 
174 
175 
176 
177 
* 20) 
178 
print(nl I n2) 
179 
print(5 | 9) 
188 
181 
182 
D:\python\python.exe C:/Users/zongzi/PycharmProjec 
2 
1 
6 
13

 

 

|:

按位或運算符:只要對應的兩個二進制位1時,結果位就為1

二進制對比,有1就保留

print('*' *20)

print(n1|n2)

print(5|9)

168 
169 
170 
171 
E 173 
174 
175 
176 
177 
178 
179 
180 
181 
182 
nl - Ob0110 # 6 
print(nl & n2) 
print (5 & 9) 
1 
1 
print('*' * 20) 
print(nl I n2) 
print (5 | 9) 
D:\python\python.exe C:/Users/zongzi/PycharmProj 
2 
1 
6 
131 
Process finished with exit code

 

 

 

^:

按位異或運算符:當兩對應的二進制相異時,結果為1

(異或)上下兩個數位相同為0,不同為1

n1 = 0b0110   #6

n2 = 0b0010   #2

print(n1 ^ n2)

183 
181* 
185 
186 
nl - 0120110 
n2 = Ob001@ 
print(nl n2) 
D:\python\python.exe C:/Users/zongzi/Py 
4 
Process finished with exit code @

 

~:

按位取反運算符:對數據的每個二進制取反,把1變為0,把0變為1,~x類似於-x-1

 

n1 = 0b0110   #6

n2 = 0b0010   #2

print('*' *20)

print(~n1)   #0000 0110 ------> 取反:1111 1001

print(~5)   #0000 0101 ------> 1111 1010

 

 

二進制的負數表示:

原碼  0110

反碼  1001

補碼  反碼+1  1001

                     +     1

                 ---------------

                      1010

 

 

明確:

1.已知十進制負數,求二進制負數:

  ①.正數的原碼  ②.原碼取反 ③.加1 ------>  得到的二進制就是負數的二進制

 -7的進制:

   步驟:

   1.先求+7的二進制原碼:0000 0111

   2.反碼:1111 1000

   3.補碼:1111 1001

  -7的二進制是:1111 1001

2.已知二進制的負數(判斷是否是負的二進制的依據,看二進制的最高位:1111 1010,最高位是1則為負數,0則為整數)

  ①二進制(負的) ②二進制減1 ③取反 ④原碼 將原碼轉成十進制,在十進制的前面添加負號:-

  已知:二進制:1111 1010,十進制表示    -6

    1111 1010

  -               1

--------------------

    1111 1001  ------> 反碼

 

   原碼:0000 0110 ------> 6

   -6

3.~5 ------> 就是將5的二進制取反

 

 

練習:

 1.~7 打印出來的十進制是多少?-8

     0000 0111 ------> 1111 1000

     減1:1111 0111

     取反 0000 1000

     原碼 0000 1000

    十進制:-8

  2.-9的二進制表示  1111 0111

  3.~-4,打印出來的十進制是多少?3

      先得到-4的二進制

         00000100

       11111011

       11111100------>取反 0000 0011

  4.1111 1101 的十進制表示

     減1 11111100

     取反 00000011

     原碼 00000011

     十進制 -3

 

 

<<

n = 12   # 00001100

print( n << 1)  # 24  12*2

print( n << 2)   # 48  12*2*2 往左移動兩位,后面補兩個零

print( n << 3)  # 96  12*2*2*2  

總結:12*2的n次方

 

n = 12 #00001100

print( n >> 1)  # 6  12//2 --->6

print( n >> 2)   # 3  12//4

print( n >> 3)   # 1    12//8

 

n = 89  右移五位

n = 93 左移三位

print(89 >> 5)

print(93 << 3)

 

二、運算符優先級

優 先 級 
最 高 
最 亻 氐 
運 算 符 
is is not 
in not in 
and or not 
廟 述 
扌 旨 數 ( 最 高 優 先 級 ) 
按 位 翻 轉 , 一 元 加 號 和 減 號 ( 最 后 兩 個 的 方 法 名 為 十@ 和 .@) 
乘 , 除 , 取 模 和 取 整 除 
加 法 減 法 
右 侈 , 左 移 運 算 符 
{S&l'AND 
比 較 運 篡 符 
等 於 運 算 符 
巛 值 運 篡 符 
身 份 運 算 符 
成 員 運 篇 符 
邏 輯 運 篡 符

1 
193 
194 
195 
196 
197 
198 
19 9 
x builtins.py 
20 
result 
print(result) 
1 
2 
print(b > a + x < a + b) # 2>21<3 
D:\python\python.exe C:/Users/zongzi/P' 
500 
False 
Process finished with exit code 6

 

x = 20

result = 20*5**2

a = 1

b = 2

print(b>a+x<a+b)

print(b>a+(x<a+b))   #Ture

print(a+False)  # False=0

 

總結:

1.算術運算符

2.賦值運算符 = += -=

3.比較運算符 > < == != …

4.邏輯運算符 and or not

5.位運算 & | ^ ~ << >> 負數的二進制

6.運算符的優先級 :()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM