下面是 NumPy 包中可用的位操作函數(shù)。
| 序號 | 操作及描述 |
|---|---|
| 1. | bitwise_and 對數(shù)組元素執(zhí)行位與操作 |
| 2. | bitwise_or 對數(shù)組元素執(zhí)行位或操作 |
| 3. | invert 計算位非 |
| 4. | left_shift 向左移動二進(jìn)制表示的位 |
| 5. | right_shift 向右移動二進(jìn)制表示的位 |
bitwise_and通過np.bitwise_and()函數(shù)對輸入數(shù)組中的整數(shù)的二進(jìn)制表示的相應(yīng)位執(zhí)行位與運(yùn)算。
例子
import numpy as np
print '13 和 17 的二進(jìn)制形式:'
a,b = 13,17
print bin(a), bin(b)
print '\n'
print '13 和 17 的位與:'
print np.bitwise_and(13, 17)
輸出如下:
13 和 17 的二進(jìn)制形式:
0b1101 0b10001
13 和 17 的位與:
1
你可以使用下表驗證此輸出。 考慮下面的位與真值表。
| A | B | AND |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | ||
|---|---|---|---|---|---|
| AND | |||||
| 1 | 0 | 0 | 0 | 1 | |
| result | 0 | 0 | 0 | 0 | 1 |
bitwise_or通過np.bitwise_or()函數(shù)對輸入數(shù)組中的整數(shù)的二進(jìn)制表示的相應(yīng)位執(zhí)行位或運(yùn)算。
例子
import numpy as np
a,b = 13,17
print '13 和 17 的二進(jìn)制形式:'
print bin(a), bin(b)
print '13 和 17 的位或:'
print np.bitwise_or(13, 17)
輸出如下:
13 和 17 的二進(jìn)制形式:
0b1101 0b10001
13 和 17 的位或:
29
你可以使用下表驗證此輸出。 考慮下面的位或真值表。
| A | B | OR |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | ||
|---|---|---|---|---|---|
| OR | |||||
| 1 | 0 | 0 | 0 | 1 | |
| result | 1 | 1 | 1 | 0 | 1 |
invert此函數(shù)計算輸入數(shù)組中整數(shù)的位非結(jié)果。 對于有符號整數(shù),返回補(bǔ)碼。
例子
import numpy as np
print '13 的位反轉(zhuǎn),其中 ndarray 的 dtype 是 uint8:'
print np.invert(np.array([13], dtype = np.uint8))
print '\n'
# 比較 13 和 242 的二進(jìn)制表示,我們發(fā)現(xiàn)了位的反轉(zhuǎn)
print '13 的二進(jìn)制表示:'
print np.binary_repr(13, width = 8)
print '\n'
print '242 的二進(jìn)制表示:'
print np.binary_repr(242, width = 8)
輸出如下:
13 的位反轉(zhuǎn),其中 ndarray 的 dtype 是 uint8:
[242]
13 的二進(jìn)制表示:
00001101
242 的二進(jìn)制表示:
11110010
請注意,np.binary_repr()函數(shù)返回給定寬度中十進(jìn)制數(shù)的二進(jìn)制表示。
left_shiftnumpy.left shift()函數(shù)將數(shù)組元素的二進(jìn)制表示中的位向左移動到指定位置,右側(cè)附加相等數(shù)量的 0。
例如,
import numpy as np
print '將 10 左移兩位:'
print np.left_shift(10,2)
print '\n'
print '10 的二進(jìn)制表示:'
print np.binary_repr(10, width = 8)
print '\n'
print '40 的二進(jìn)制表示:'
print np.binary_repr(40, width = 8)
# '00001010' 中的兩位移動到了左邊,并在右邊添加了兩個 0。
輸出如下:
將 10 左移兩位:
40
10 的二進(jìn)制表示:
00001010
40 的二進(jìn)制表示:
00101000
right_shiftnumpy.right_shift()函數(shù)將數(shù)組元素的二進(jìn)制表示中的位向右移動到指定位置,左側(cè)附加相等數(shù)量的 0。
import numpy as np
print '將 40 右移兩位:'
print np.right_shift(40,2)
print '\n'
print '40 的二進(jìn)制表示:'
print np.binary_repr(40, width = 8)
print '\n'
print '10 的二進(jìn)制表示:'
print np.binary_repr(10, width = 8)
# '00001010' 中的兩位移動到了右邊,并在左邊添加了兩個 0。
輸出如下:
將 40 右移兩位:
10
40 的二進(jìn)制表示:
00101000
10 的二進(jìn)制表示:
00001010