Рассчитать ~ 100 вручную - PullRequest
       4

Рассчитать ~ 100 вручную

1 голос
/ 20 октября 2010

Если я распечатаю ~100 на Java, я получаю -101. Я пытаюсь решить это вручную.

Оператор NOT (~) инвертирует все биты.

100 в двоичном виде - 00000000000000000000000001100100.

инвертирование битов дает:

11111111111111111111111110011011

И что теперь? Как мне получить -101?

Ответы [ 2 ]

10 голосов
/ 20 октября 2010

Java использует дополнение до двух (см. §4.2 Типы и значения примитивов) Чтобы отрицать, вы берете дополнение и добавляете одно.

-x = ~x + 1
~x = -x - 1
~100 = -100 - 1

Еще один способ думать об этом - заметить:

11111111111111111111111111111111 = -1

затем выполните:

  11111111111111111111111111111111 (-1)
- 11111111111111111111111110011011 (~x)
=                          1100100 (100)

-1 - ~x = 100
-1 - 100 = ~x
~x = -101
0 голосов
/ 20 октября 2010

Большинство систем сегодня работают с системой дополнения 2. В этой системе положительные числа такие же, как в старой двоичной системе, тогда как отрицательные числа отличаются (это помогает сопоставить другое отрицательное число с использованием того же количества битов)

Если вы хотите взять число в этой системе и перевести его обратно в бинарный файл старой моды:

~ (NegNumber) + 1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...