2016-12-27 2 views
5
-4 & -5 = -8 // How? 
-4 & 5 = 4 // How? 

Мне нужно объяснение того, как можно достичь вышеуказанных результатов. У меня нет никаких трудностей в решении с положительными целыми числами.Как отрицательные операнды для побитовых операторов работают на Java?

+0

Возможный дубликат [Как возникают результаты побитового оператора?] (Http://stackoverflow.com/questions/20169287/how-do-bitwise-operator-results-occur) – vaxquis

ответ

9

Просто преобразовать целые числа в двоичном представлении (для отрицательных чисел, используйте two's complement) и запустить побитовое И:

-4 11111..1100 & 
-5 11111..1011 

-8 11111..1000 


-4 11111..1100 & 
5 00000..0101 

4 00000..0100 
+0

Я тоже пробовал с дополнением 2 для -ve целые числа, но я не понимаю, почему я не получил правильного ответа, пока не увидел ваш :( – divine

+1

@divine. Способ найти дополнение 2 к положительному 'int' i - рассчитать 2^32-i. 2^32 составляет 10000..000 (1 за которым следует 32 0s). Если вы вычитаете из него 4 (100), вы получите 1111 ... 11100 (30 1 с, а затем 2 0s), что является двоичным представлением -4. – Eran

+1

Другое способы найти дополнения 2. 1) Не и затем увеличивать: 2) Записывать из LSb все нули до первого включения, а затем записывать оставшиеся биты, дополненные. –

3

Давайте посмотрим, как номера представляют:

positive four 0100   
negative four 1100 
positive five 0101   
negative five 1011 
negative eight 1000 

Если вы пытаетесь сделать руководство по эксплуатации and, вы получите такой результат:

1100 (-4) & 1011 (-5) = 1000 (-8) 
1100 (-4) & 0101 (5) = 0100 (4) 

Here вы можете подробнее узнать об этом.

Смежные вопросы