在Python中,波浪线(~
)通常用作一元按位取反操作符,但它实际上更常用于NumPy等数学和科学计算库,在这些库中,它表示数组或矩阵的逐元素取反操作。
以下是几个使用波浪线的例子:
python复制代码
x = 5 # 二进制表示为 0101 |
|
y = ~x # 按位取反,结果为 -6(二进制表示为 -0110,但由于Python中的整数是补码表示,所以实际上是...11111111111110010) |
|
print(y) # 输出: -6 |
请注意,Python中的整数是无限精度的,并且使用补码表示法,所以取反操作后的结果可能不是你预期的二进制直接取反的结果。实际上,~x
等于 -x - 1
对于整数 x
。
python复制代码
import numpy as np |
|
# 创建一个NumPy数组 |
|
arr = np.array([1, 2, 3, 4, 5]) |
|
# 使用波浪线对数组进行逐元素取反 |
|
inverted_arr = ~arr |
|
print(inverted_arr) # 输出: [-2 -3 -4 -5 -6] (注意这些是补码表示的有符号整数) |
同样地,在NumPy中,波浪线操作符也是应用的补码取反,所以结果可能看起来不是直接的二进制取反。对于无符号整数类型(如uint8
),取反操作会按照模数(即数据类型的最大值加1)进行,因此结果可能更加直观。
虽然Python中布尔值的取反通常使用关键字not
,但波浪线不能直接应用于布尔值进行取反。然而,在NumPy中,布尔数组可以使用波浪线进行逐元素取反:
python复制代码
import numpy as np |
|
# 创建一个布尔NumPy数组 |
|
bool_arr = np.array([True, False, True, False]) |
|
# 使用波浪线对布尔数组进行逐元素取反 |
|
inverted_bool_arr = ~bool_arr |
|
print(inverted_bool_arr) # 输出: [False True False True] |
在这个例子中,True
被取反成了False
,False
被取反成了True
。