Что происходит в & = -a с Java

Я вижу этот комментарий, но не понимаю.

Получите последний установленный бит

diff &= -diff;

Я пытался

int a = 3 & -3; it returns 1.
int a = 2 & -2; it returns 2.
int a = 4 & -4; it returns 4.
int a = 5 & -5; it returns 1.
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
76
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Комментарий лучше выразить как «Установить младший значащий бит». Чтобы понять, что происходит, вам нужно изучить, как отрицательные числа представлены в двоичном формате. Эта техника называется дополнением до двух и работает, начиная с положительного представления числа; вы дополняете каждый бит (т.е. 1 -> 0 и 0 -> 1). Затем вы добавляете 1 к этому числу. В примере 12:

00001100 12
11110011 complement
00000001 binary 1
11110100 add to complement to form twos complement negative

Если вы теперь И исходное значение с отрицательным, вы получите

00000100 

где единственный набор битов соответствует младшему значащему набору бита в исходном шаблоне.

Большое спасибо! Я впервые задаю вопрос с помощью Stack overflow и так быстро получил подробный ответ. Я очень ценю это.

Xueqian Long 16.10.2018 04:12

Как сказано в комментарии, diff & -diff возвращает значение последнего бита, установленного в diff. Например:

diff = 14
.... = 1110 (binary)
....     ^ last set bit
.... 10 is the last set bit
.... 10 in decimal is 2

Другой пример

diff = 24
.... = 11000 (binary)
....    ^ last set bit
.... 1000 is the last set bit
.... 1000 in decimal is 8

Я бы порекомендовал прочитать руководство, как задать хорошо сформулированный вопрос. Одна рекомендация, которую я могу дать лично, - иметь одно предложение в конце вашего вопроса, которое точно подводит итог тому, что вы хотите знать.

Спасибо за инструкцию и извините за неоднозначный вопрос. Я приму твой совет в следующий раз.

Xueqian Long 16.10.2018 04:14

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