numpy中的一元运算符~有什么作用?

8 投票
4 回答
3660 浏览
提问于 2025-04-16 02:26

我看到了一段用Python的numpy库写的代码,内容是这样的:

~array([0,1,2,3,4,5,4,3,2,1,0,-1,-2])

运行后得到了这个结果:

array([-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1,  0,  1])

请问这个一元运算符(~)是怎么作用于数组的?它的效果是把A变成-(A+1)吗?

如果真是这样,那这样做有什么意义呢?

4 个回答

2

这个 ~ 符号是一个叫做“反码”的操作符。如果你在用整数的时候,可以在任何 Python 程序中使用它(并不是只有在 numpy 中才能用)。

4

http://en.wikipedia.org/wiki/Bitwise_operation#NOT

你会得到负数的原因是因为它们在二进制中是怎么表示的:

http://en.wikipedia.org/wiki/Two%27s_complement

14

Chris Lutz的评论是对的。

~ 是一个叫做 按位取反运算符 的东西。

它的作用是把A变成-(A+1)。这是因为在很多现代计算机中,负数是用 二进制补码 来表示的。简单来说,就是把这个数从 2^(位数) 中减去(这里的“位数”是指二进制位数,而不是“二与位数的异或”)。

在这种系统中,-1会被表示为全是1的二进制数。当然,一个数和它的按位取反的结果相加,也会得到全是1的结果,所以我们就得到了这样的情况:

a + ~a = -1        =>
    ~a = -1 - a    =>
    ~a = -(a + 1)

正如你所注意到的。

撰写回答