Что делает унарный оператор ~, делают в numpy?

Я столкнулся со строкой кода с помощью numpy Python, который был похож на это:

~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+1)

Если так, какой смысл?

7
задан Hooked 6 August 2010 в 21:43
поделиться

4 ответа

Комментарий Криса Лутца верен.

~ - это оператор побитового отрицания

Похоже, он превращает A в - (A + 1), потому что на многих современных компьютерах отрицательные числа представлены как Дополнение до двух числа соответствующее положительное целое число, где это число вычитается из 2 ^ (длина в битах) (это «два в степени длины в битах», а не «два исключающих числа или длина в битах» ...).

В такой системе -1 будет представлен как все единицы. Конечно, то же самое будет и с суммой числа и его побитового отрицания, поэтому мы имеем ситуацию, когда

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

, как вы заметили.

14
ответ дан 6 December 2019 в 09:17
поделиться

Дело в том, чтобы иметь возможность принимать дополнение значений в массиве. В случае 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]
0
ответ дан 6 December 2019 в 09:17
поделиться

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

Причина, по которой в итоге получаются отрицательные числа, заключается в том, как они представлены в двоичной форме:

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

4
ответ дан 6 December 2019 в 09:17
поделиться

~ - это оператор дополнения единиц , и если вы используете с целыми числами, его можно использовать в любой программе Python (не только для numpy)

2
ответ дан 6 December 2019 в 09:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: