Глядя на алгоритмы в прошлом, всякий раз, когда я наткнулся на побитовый оператор, как << , >> , & , |. , ^ Я бы подумал: «Это слишком сложно». Однако со временем изучение удивительно, потому что мы можем начать принимать новые концепции, и они перестают быть недоступными.
Проще говоря, это некоторые «двоичные числа». Когда мы перемещаем 1 влево, предыдущее число умножает на 2.
0001 is 1 0010 is 2 0011 is 3 // 3 is 2 and 1 combined 0100 is 4
Чтобы узнать, почему двоичные для регулярных чисел (десятичных) преобразуются подобные более глубине Проверь это.
Принимать эти основы во внимание операции с бинальями или Битовое манипуляция Позволяет внести модификации или сравнивать разные номера, а также даже делать то же самое с символами, преобразованными в двоичный.
Настолько побитовые операторы похожи на математические операторы или логические операторы, но они имеют дело с двоичными числами.
Как быстрый пример побитовой операции, если мы сделаем 2<<1 Результат 4. Это потому, что левый сдвиг << служит для перемещения всех 1 битов в двоичном номере слева, так:
2 which is 0010 moves left and becomes 4 which is 0100
Так что левая смена << 1 одним пространством, умножает на два.
То же самое с правым сдвигом >> 1 И это просто делится на два.
Теперь с другими операциями & | ^ или ~ Отказ Мы можем сравнить два двоичных номера. И с этим контекстом видео вроде это может иметь больше смысла.
Сопоставление символов в двоичный
Так что для достижения этого мы должны вспомнить, что письма имеют соответствующие коды номеров, называемых кодами ASCII. В JavaScript мы можем получить этот код с .charcodeat. () метод.
Например, строчная буква «A» имеет код ASCII из 97 и строчной буквы «B» составляет 98.
Затем персонаж может быть сопоставлен с двоичным, двигаясь немного, чтобы соответствовать коду ASCII.
let anumberOfLeftShifts = 'a'.charCodeAt(0) - 97 // returns 0 bc 97 - 97 let aInBinary = 1 << anumberOfLeftShifts // => 0001 let bnumberOfLeftShifts = 'b'.charCodeAt(0) - 97 // returns 1 bc 98 - 97 let aInBinary = 1 << bnumberOfLeftShifts // => 0010
Таким образом, отображение числа и символ двоичного ввода – это другой процесс, но оба способа позволяют делать битные манипулирования.
В качестве быстрого примера мы можем видеть, имеют ли две строки одинаковыми буквами.
let s1 = "hello" let s2 = "loeh" let s1Mask = 0 let s2Mask = 0 for(let i = 0;i
Вот список побитовых операторов в сравнении битов:
&И если они одинаковы возвращаются так же, если они разные возвраты 0| Или если они одинаковы возвращаются та же бит, Если они разные возвраты 1^Хор, если они одинаковы возвращаются 0, если они разные возвраты 1
Чувствую себя более чем желанию, чтобы добраться до любых идей/комментариев на LinkedIn или Twitter или проверить мой портфолио Отказ
Оригинал: “https://dev.to/santispavajeau/simple-bit-manipulation-516i”