NumPy學習筆記12 位運算

2021-09-29 04:06:47 字數 3136 閱讀 6118

numpy"bitwise_"開頭的函式是位運算函式。包括以下幾個函式:

函式描述

bitwise_and

對陣列元素執行位與操作

bitwise_or

對陣列元素執行位或操作

invert

按位取反

left+shift

向左移動二進位制表示的位

right_shift

向右移動二進位制表示的位

注:也可適用「&」,「~」,「 | 」和「^」等操作符進行計算。

bitwise_and

import numpy as np

print

('13和17的二進位制形式:'

)a,b =13,

17print

(bin

(a),

bin(b)

)print

('\n'

)print

('13和17的位與:'

)print

(np.bitwise_and(13,

17))

13和17的二進位制形式:

0b1101 0b10001

13和17的位與:

1

位與操作符的規律**說明:ab

and111

1000

1000

0bitwise_or

bitwise_or()函式對陣列中整數的二進位制形式執行位或運算。

import numpy as np

a,b =13,

17print

('13和17的二進位制形式:'

)print

(bin

(a),

bin(b)

)print

('13和17的位或:'

)print

(np.bitwise_or(13,

17))

13和17的二進位制形式:

0b1101 0b10001

13和17的位或:

29

位或操作符的規律**說明:ab

or111

1010

1100

0invert

invert()函式對陣列中整數進行位取反運算,即0變成1,1變成0。

對於有符號整數,取該二進位制數的補碼,然後+1,二進位制數,最高位為0表示正數,最高位為1表示負數

~1的計算步驟:

表示式二進位制值(2的補數)

十進位制值

500000000 00000000 00000000 00000105~5

11111111 11111111 11111111 11111010

-6

import numpy as np

print

('13的位反轉,其中ndarray的dtype是uint8:'

)print

(np.invert(np.array([13

],dtype = np.uint8)))

print

('\n'

)# 比較13和242的二進位制表示,可以發現 位的反轉

print

('13的二進位制表示:'

)print

(np.binary_repr(

13,width =8)

)print

('\n'

)print

('242的二進位制表示:'

)print

(np.binary_repr(

242,width =8)

)

13的位反轉,其中ndarray的dtype是uint8:

[242]

13的二進位制表示:

00001101

242的二進位制表示:

11110010

left_shift

left_shift()函式將陣列元素的二進位制形式向左移動到指定位置,右側附加相等數量的0.

import numpy as np

print

('將10左移兩位:'

)print

(np.left_shift(10,

2))print

('\n'

)print

('10的二進位制表示:'

)print

(np.binary_repr(

10,width =8)

)print

('\n'

)print

('40的二進位制表示:'

)print

(np.binary_repr(

40,width =8)

)# '00001010'中的兩位移動到了左邊,並在右邊新增了兩個0

將10左移兩位:

4010的二進位制表示:

00001010

40的二進位制表示:

00101000

right_shift

right_shift()函式將陣列元素的二進位制形式向右移動到指定位置,左側附加相等數量的0.

import numpy as np

print

('將40右移兩位:'

)print

(np.right_shift(40,

2))print

('\n'

)print

('40的二進位制表示:'

)print

(np.binary_repr(

40,width =8)

)print

('\n'

)print

('10的二進位制表示:'

)print

(np.binary_repr(

10,width =8)

)# '00001010'中的兩位移動到了右邊,並在左邊新增了兩個0.

將40右移兩位:

1040的二進位制表示:

00101000

10的二進位制表示:

00001010

學習參考:

位運算學習筆記

1.補碼 補碼是為了表示乙個負數的二進位制形式。其轉化方式是,先將負數當成正數,轉化成二進位制的形式,再將二進位制正數的各個位上取反,再加上 例如 5先求出5的二進位制數 0000 0000 0101 然後將各個位上0變1 1變0 1111 1111 1010 最後再加1 1111 1111 101...

位運算學習筆記

要明白位運算是在二進位制中的運算方式,所有其他進製的數在進行位運算時都要先轉化成二進位制數再進行運算。int 是 32位二進位制。有符號整型 正數 0 負數 1 1 00000.0001 1 10000.00011.按位與 只有當x,y都是1的時候,運算結果才是1,其餘情況都是0.1 1 1 1 0...

位運算學習筆記

1 二進位制最高位是符號位 0代表正數,1代表負數 2 正數的原碼 反碼 補碼都相同 3 負數的反碼是將原碼符號位不變,其他位取反。4 負數的補碼是將反碼 1 5 0的原碼 補碼都是0 6 計算機中是依據補碼進行計算的。7 練習 1 2 例題說明 對2按位取反。由於2為正數,正數的原碼 補碼相等。所...