invert() 函数对数组中整数进行位取反运算,即 0 变成 1,1 变成 0。
对于有符号整数,取该二进制数的补码,然后 +1。二进制数,最高位为0表示正数,最高位为 1 表示负数。
看看 ~1 的计算步骤:
将
1
(这里叫:原码)转二进制 =
00000001
按位取反 =
11111110
发现符号位(即最高位)为
1
(表示负数),将除符号位之外的其他数字取反 =
10000001
末位加1取其补码 =
10000010
转换回十进制 =
-2
表达式
二进制值(2 的补数)
十进制值5
00000000 00000000 00000000 00000105
~511111111 11111111 11111111 11111010
print
(
'
13 的位反转,其中 ndarray 的 dtype 是 uint8:
'
)
print
(
np
.
invert
(
np
.
array
(
[
13
]
,
dtype
=
np
.
uint8
)
)
)
print
(
'
\n
'
)
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
print
(
'
40 的二进制表示:
'
)
print
(
np
.
binary_repr
(
40
,
width
=
8
)
)
输出结果为:
将 10 左移两位:
10 的二进制表示:
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
)
)
输出结果为:
将 40 右移两位:
40 的二进制表示:
00101000
10 的二进制表示:
00001010