Я столкнулся со строкой кода с помощью 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)
Если так, какой смысл?
Комментарий Криса Лутца верен.
~ - это оператор побитового отрицания
Похоже, он превращает A в - (A + 1), потому что на многих современных компьютерах отрицательные числа представлены как Дополнение до двух числа соответствующее положительное целое число, где это число вычитается из 2 ^ (длина в битах)
(это «два в степени длины в битах», а не «два исключающих числа или длина в битах» ...).
В такой системе -1 будет представлен как все единицы. Конечно, то же самое будет и с суммой числа и его побитового отрицания, поэтому мы имеем ситуацию, когда
a + ~a = -1 =>
~a = -1 - a =>
~a = -(a + 1)
, как вы заметили.
Дело в том, чтобы иметь возможность принимать дополнение значений в массиве. В случае 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]
http://en. wikipedia. org/wiki/Bitwise_operation#NOT
Причина, по которой в итоге получаются отрицательные числа, заключается в том, как они представлены в двоичной форме:
~ - это оператор дополнения единиц , и если вы используете с целыми числами, его можно использовать в любой программе Python (не только для numpy)