Рубрики
Без рубрики

Подготовка к собеседованию: Подробнее о битовых манипуляциях

Добро пожаловать снова в очередной эпизод подготовки к собеседованию. Мы немного поиграли с Манипулой… Помеченный java, битовая манипуляция.

Добро пожаловать снова в очередной эпизод подготовки к собеседованию. В последнее время мы немного поиграли с манипуляциями. Если вы не уловили мою первую статью, в которой излагаются основы, быстро прочтите ее сейчас, так как мы продолжим с того места, на котором она остановилась:

Побитовая Манипуляция, Часть I

В качестве краткого обзора помните, что “битовая манипуляция” означает, что мы работаем с базой 2 вместо базы 10. Причина, по которой мы заботимся о том, что работа в базе-2 дает нам более высокий уровень контроля над нашими данными. Думайте о манипуляциях с долотами как о работе с пилочкой для ногтей вместо молотка.

Итак, теперь, когда вы знаете некоторые основные операции по обработке битов из моей первой статьи, давайте используем эти операции, чтобы сделать несколько интересных вещей, а также помочь нам ответить на некоторые возможные вопросы интервью.

Очистите Наименее значимый бит, который Набор

Вопрос, который вы можете получить, звучит так:” Очистите наименее значимый бит набора в заданной последовательности битов”

Во-первых, давайте определимся с терминами. Что они подразумевают под “значительным” битом?

Простой. Посмотрите на эту последовательность битов:

                                          X
1010001110000001000000010000111100000101010

Теперь приложите палец к экрану (продолжайте, я не скажу!) в крайней правой части последовательности (помечено знаком “X”). Теперь проведите пальцем вдоль последовательности слева.

Теперь вы перемещаете палец от наименее значимого бита к более значимым битам.

<<---<<<<---<<<<
                                          X
1010001110000001000000010000111100000101010
Y

В нашем примере бит, отмеченный знаком “X”, является наименее значимым, а “Y” – наиболее значимым битом. Степень “значимости” возрастает по мере того, как мы перемещаем палец вдоль последовательности битов справа налево.

Теперь вернемся к нашему первоначальному вопросу. Давайте возьмем свежую последовательность битов:

Нас просят создать алгоритм, который очищает наименее значимый бит набора.

Если мы положим палец на крайнюю правую часть последовательности (ячейка E3), мы переместим палец влево вдоль последовательности и там перейдем от наименее “значимого” бита к более значимому биту. Первый бит набора, к которому мы подходим, – это “1” в ячейке D1, отмеченной красным цветом. Это тот бит, который нам нужно очистить и превратить в ноль.

В нашем алгоритме нам нужно выполнить две основные задачи: 1) найти наименее значимый бит набора, а затем “очистить” его, то есть установить его равным нулю.

Теперь начинается самая крутая часть. Самый простой способ, которым мы можем найти и очистить наименее значимый бит, – это использовать битовую манипуляцию. И вот формула, которая работает каждый раз для этой проблемы:

 x & ( x - 1)

Давайте просто разработаем приведенную выше формулу!

Нам дали “х”.:

Теперь давайте наберем x-1 в строке 5:

Наконец, давайте выясним, к чему сводится выражение x & (x-1):

Просто чтобы ознакомиться с нашей операцией “&”:

В Колонке А: “1” в строке 3 и “1” в строке 5 преобразуются в “1” в строке 8.

Столбец B: 0 и 0 преобразуются в 0

Столбец C: 1 и 1 преобразуются в 1

Столбец D: 1 и 0 преобразуются в 0

Столбец E: 0 и 1 преобразуются в 0

Помните, мы хотели найти и очистить наименее значимый бит в строке 3, бит, отмеченный красным. И это то, что мы сделали! В строке 8 мы видим ячейку D8, отмеченную синим цветом, где ячейка была очищена.

Наша секретная формула: x & (x-1) очистила наименее значимый бит.

ещё один

Давайте рассмотрим еще одну проблему. Учитывая последовательность

биты (мы начнем с того же, который мы использовали)

Нас просят написать алгоритм, который устанавливает наименее значимый очищенный бит.

На изображении выше нам дана последовательность в строке 3. Наименее значимый очищенный бит находится в ячейке E3. Мы хотим, чтобы наш алгоритм выбрал эту ячейку и установил ее так, чтобы у нас осталась последовательность битов в строке 8.

Как мы это делаем?

Просто! Мы воспользуемся другой формулой манипуляции с магическими битами. На этот раз это:

          x | (x + 1)

Давайте сделаем это!

У нас уже есть “x”, поэтому давайте заполним (x + 1) в строке 5 ниже, а затем проверим, соответствует ли он нашему желаемому результату в строке 8:

Мы видим, что мы успешно нашли наименее значимый очищенный бит в нашей заданной последовательности (ячейка E3) и установили его в нашем результате в ячейке E8 (красным цветом) в строке 8. Вот так!

Это всего лишь пара трюков. Есть и другие, поэтому я надеюсь, что это разожжет ваш аппетит и повысит вашу оценку манипуляций с битами. Такой взгляд на цифры позволяет нам внести некоторые незначительные изменения в наши ценности, которые в противном случае были бы невозможны.

Продолжайте воплощать свои мечты!

Оригинал: “https://dev.to/kuddleman/interview-prep-more-on-bit-manipulation-25mm”