Инвертор Python - визуализация отрицательного числа
Проще говоря, определение, данное для ~n, равно -n - 1.
Например ~1
1 = 0001
~1 = 1110 (which is -2)
Для четных чисел
скажи ~2
2 = 0010
~2 = 1101 (which is the representation of -3 in twos complement)
Но вопрос в том,
1110 = -2 can be easily visualized as -2 (the right two bits are 10 and the rest all 1)
1101 = -3 can't be visualized like this (going by the above logic it should be -5)
Поэтому мне интересно, есть ли простой способ увидеть и сказать из двоичного двоичного кода, дополняющего двоичное число, что представляет собой отрицательное число, не выполняя больших вычислений.
2 ответа
~n = -n - 1
эквивалентно -n = ~n + 1
, Это означает, что, чтобы выяснить, что является отрицательным числом, вы можете инвертировать его (в своей голове) и добавить один. Представьте, что нули единичны и наоборот, затем добавьте один.
Пример: притворись этим
1101
это
0010
затем добавьте 1
0011
Таким образом, 1101
представляет собой -3
,
Определение происходит из-за дополнения в 2 представления целых чисел. Серьезно" ~n
является n
со всеми перевернутыми битами. Но результат переключения "всех" битов в некотором смысле зависит от того, сколько битов n
имеет в первую очередь. CPython внутренне использует целые числа фиксированной ширины, но язык не представляет их программисту, поэтому единственное определение, которое имеет смысл в общем, это арифметическое ~n = -n - 1
, Но мотивация для этого определения - переворачивать биты целого числа дополнения фиксированной ширины.
1110 = ~ 2 можно легко представить как -2
...1110
не является ~2
, это -2
, ~2
является ...1101
так как 2
является ...010
,
1101 = ~3 нельзя представить так
...1101
не является ~3
, это -3
, ~3
является ...1100
так как 3
является ...011
,
То, как я это представляю (когда я вообще это представляю - как математик по образованию, я предпочитаю не рассматривать конкретные числа), - это знать, что в дополнении 2, ...10...
всегда отрицательная сила двух. Так ...10
это -2, ...100
-4 и т. д.
Тогда для того, чтобы узнать что например ...110110
это ...110000
+ 110
то есть -16
+ 6
, который -10
,
Конечно ...110110
также (по щелчку) ~1001
то есть ~9
который по формуле -9-1
что также -10
, Так что система работает;-)