我使用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)
如果是这样,最重要的是什么?
答案 0 :(得分:14)
Chris Lutz的评论是正确的。
看起来它将A变为 - (A + 1),因为在许多现代计算机上,负数表示为相应正整数的Two's Complement,其中数字从2^(bit length)
中减去(这是“比特长度的两个”,而不是“两个独占或比特长度”......)。
在这样的系统中,-1将表示为全1。 当然,数字的总和也是负数的总和,所以我们有这样的情况
a + ~a = -1 =>
~a = -1 - a =>
~a = -(a + 1)
你注意到了。
答案 1 :(得分:4)
http://en.wikipedia.org/wiki/Bitwise_operation#NOT
你最终得到负数的原因是它们以二进制形式表示:
答案 2 :(得分:2)
〜是ones' complement运算符,如果你使用int,它可以在任何python程序中使用(它不仅仅是numpy)
答案 3 :(得分:0)
关键是要能够采用阵列中的阀门的补充。在numpy的情况下,它似乎是以下的简写:
>>> map(lambda e: ~e, [0,1,2,3,4,5,4,3,2,1,0,-1,-2])
[-1, -2, -3, -4, -5, -6, -5, -4, -3, -2, -1, 0, 1]