что происходит в & = -a с Java - PullRequest
0 голосов
/ 14 октября 2018

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

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

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.

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Как сказано в комментарии, 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

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

0 голосов
/ 14 октября 2018

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

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

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

00000100 

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

...