python与或非位运算_python位运算
什么是位運算
位運算就是把數字當成二進制來進行計算,位運算有六種:&(與), |(或), ^(異或), ~(非), <>(右移)
&(與)
&運算規則:兩個位都為1,結果為1,否則為0
# &(與)
a = 3
b = 9
print(a & b)
# a----0101
# b----1001
# a&b--0001
# a&b=1
## |(或)
|運算規則:兩個位至少有一個為1,結果為1,否則為0
```python
# |(或)
a = 3
b = 9
print(a | b)
a----0101
b----1001
a|b--1101
a|b=11
## ^(異或)
^運算規則:兩個位不同,結果為1,否則為0
```python
# ^(異或)
a = 3
b = 9
print(a ^ b)
# a----0101
# b----1001
# a^b--1100
# a^b=10
## ~(非)
~運算規則:對所有位取反,1變成0,0變成1
```python
a = 5
print(~a)
猜猜結果是多少?是不是以為是2,哈哈哈
看一下打印結果
```python
-6
what? 檢查下計算過程
# a----101
# ~a--010
# ~a=2
按照運算規則,沒錯啊
這是為什么呢?其實,計算機中是以補碼的形式來進行計算的
對于正數:
原碼=反碼=補碼
對于負數:
反碼=原碼的符號位不變,其余位取反;
補碼=反碼+1
使用sys.getsizeof可以查看對象在內存空間占用的大小
import sys
a = 5
print(sys.getsizeof(a)) # 28
說明a在內存中占的位數是28
現在我們來一步一步等推算~a
a的二進制形式
0000 00000000 00000000 00000101
由于運算是以補碼的形式進行,因此要將原碼轉化成補碼,由于a為整數,因此其補碼就等于原碼
```python
# a的補碼
0000 00000000 00000000 00000101
對a的補碼進行~運算,結果為
```python
# 結果的補碼
1111 11111111 11111111 11111010
到這里要注意了,計算機運算的時候是以補碼的形式,但是顯示到終端上還是以原碼的形式,因此我們要把結果再轉化回原碼
由于結果為負數(符號為1),先把補碼轉化成反碼,反碼=補碼-1
# 結果的反碼
1111 11111111 11111111 11111001
再計算結果的原碼
# 結果的原碼
1000 00000000 00000000 00000110
再把結果的二進制轉化成十進制形式,符號為1說明是負數,-(4+2)= -6,因此結果為-6
上面的計算過程只是讓我們對計算機如何進行位運算有一個認識,實際上對于任意數a,~a = -(a+1),根本不用手工轉化成二進制計算
## <
<
```python
a = 9
print(a << 2) # 36
對于整數a,a<
## >>(右移位)
'>>'的規則:運算數的各二進位全部右移若干位,>> 右邊的數字指定了移動的位數
```python
a = 9
print(a >> 2) # 2
對于整數a,a<
總結
以上是生活随笔為你收集整理的python与或非位运算_python位运算的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx 负载均衡 404_nginx
- 下一篇: python的映射_Python学习:映