Как работают отрицательные операнды для побитовых операторов в Java?

-4 & -5 = -8 // How?
-4 & 5 = 4 // How?

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

2 ответов


просто преобразуйте целые числа в их двоичное представление (для отрицательных целых чисел используйте дополнение) и запустить бит-мудрый и:

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

-8 11111..1000


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

 4 00000..0100

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

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)

здесь вы можете узнать больше об этом.