Инвертор 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, Так что система работает;-)

Другие вопросы по тегам