



Комментарий лучше выразить как «Установить младший значащий бит». Чтобы понять, что происходит, вам нужно изучить, как отрицательные числа представлены в двоичном формате. Эта техника называется дополнением до двух и работает, начиная с положительного представления числа; вы дополняете каждый бит (т.е. 1 -> 0 и 0 -> 1). Затем вы добавляете 1 к этому числу. В примере 12:
00001100 12
11110011 complement
00000001 binary 1
11110100 add to complement to form twos complement negative
Если вы теперь И исходное значение с отрицательным, вы получите
00000100
где единственный набор битов соответствует младшему значащему набору бита в исходном шаблоне.
Как сказано в комментарии, 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
Я бы порекомендовал прочитать руководство, как задать хорошо сформулированный вопрос. Одна рекомендация, которую я могу дать лично, - иметь одно предложение в конце вашего вопроса, которое точно подводит итог тому, что вы хотите знать.
Спасибо за инструкцию и извините за неоднозначный вопрос. Я приму твой совет в следующий раз.
Большое спасибо! Я впервые задаю вопрос с помощью Stack overflow и так быстро получил подробный ответ. Я очень ценю это.