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

Подготовка к собеседованию: Манипулирование битами: Часть III

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

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

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

Статья I Побитовые манипуляции Часть 1

Побитовая манипуляция Часть 2

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

Оператор сдвига влево и вправо в Java

Java API предоставляет нам оператор сдвига влево (<<), а также оператор сдвига вправо (>>).

Давайте посмотрим, как они работают:

Давайте составим целое число с двумя основаниями. Буквы над числом – это просто способ идентифицировать каждый компонент целого числа. Давайте установим наше целое число в переменную “a”.:

          A   B   C   D   E   F  
a =       1   0   1   0   1   1

Теперь предположим, что мы хотим сдвинуть вправо это число на два места. Мы бы написали:

               a >> 2

Итак, давайте возьмем вашу “руку”, поместим ее чуть левее столбца “А” и сдвинем все целое число вправо на 2 места. Но помните, что любое число, которое помещается справа от столбца “F”, просто исчезает!

Итак, вот что мы получаем после сдвига вправо на 2

(a > > 2)

 A   B   C   D   E   F  
         1   0   1   0    

Это все, что нужно для правильного сдвига.

Теперь давайте восстановим наш первоначальный номер:

          A   B   C   D   E   F 
a =       1   0   1    0  1   1

Давайте теперь сдвинем целое число, содержащееся в переменной “a”, на 2 места в противоположном направлении влево. Мы напишем это так:

               a << 2

Итак, мы снова возьмем нашу “руку” и поместим ее на этот раз справа от столбца “F” и переместим целое число на два места влево:

                  A   B   C   D   E   F  
          a =     1   0    1   0   1   1

Но это дает нам пустые биты в столбцах “E” и “F”, как показано выше. Нам придется заполнить эти столбцы нулями, чтобы получить наш окончательный результат ниже:

             A   B    C   D    E   F  
     a =     1   0    1   0    1   1    0   0

А Теперь Несколько Классных Трюков, Которые Вы Можете Использовать В Своем Интервью:

Сдвиг вправо (> >) – это то же самое, что деление на 2

Давайте возьмем десятичное число, 10. Давайте преобразуем в базу 2: 11000

Мы сдвинем двоичный файл 11000 вправо на 1 место:

1100

Двоичный код 1100 – это десятичное число 12, которое составляет половину десятичного числа 24.

Вы можете продолжать смещаться на одно место вправо и продолжать иметь наш номер, чтобы проверить это!

Установите 2 в n-й бит целого числа X

Это хороший вариант.

Нам дано двоичное целое число, скажем, 10;

A B C D 1 0 1 0

Нам также сказали, что наше “n” равно 2. Это означает, что мы должны установить (поставить единицу) в столбце B. Почему колонка B? Короче говоря, столбец B – это 2 в столбце “n”. Наше “n” было дано как “2”. Столбец B – это наш 2-й ко 2-му столбцу:

Столбец D – от 2 до 0-го столбца или столбец “единицы”, столбец C – от 2 до 1-го столбца или столбец “двойки”, столбец B – от 2 до 2-го столбца или столбец “четверки”

Мы установим наш столбец B с помощью этой простой формулы:

        x | ( 1 << n)

Давайте разберемся с этим. Сначала давайте начнем с того, что находится внутри скобок в правой части побитового оператора “ИЛИ” ( |): 1 << n

Мы хотим сдвинуть целое число “1” влево на n мест. Нам дали n как “2”. Давайте сделаем это:

              1    //original integer

          1 0 0   // shift the original 
                     over to the left by 
                     2 places

Теперь давайте сравним наш x, 1010, со 100, используя побитовое ИЛИ (|)

      A   B   C  D
      1   0   1   0
      0   1   0   0
      _____________
      1   1   1   0      // 1010 | 0100

После применения побитового ИЛИ мы видим, что в нашем результате (1 1 1 0) в столбце B теперь задано как требуемая задача.

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

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

Намасте

Оригинал: “https://dev.to/kuddleman/interview-prep-bit-manipulation-part-iii-leo”