一元运算符〜在numpy中做什么?


问题内容

我使用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)

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


问题答案:

克里斯·卢茨的评论是正确的。

〜是按位反运算符

看起来它将A变成-(A +
1),因为在许多现代计算机上,负数表示为相应正整数的2的补数,其中减去了该数字2^(bit length)(即“ 2乘以位长的幂” ,而不是“两个互斥或位长” …)。

在这样的系统中,-1将被表示为全1。当然,一个数字与它的按位负数的和也是如此,所以我们有这样的情况

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

如您所见。