JavaScript - Битовые операторы
Привет, будущие кодировщики! Сегодня мы окунемся в fascинирующий мир битовых операторов JavaScript. Теперь я знаю, что вы думаете: "Битовые что?" Не волнуйтесь! К концу этого урока вы будете манипулировать битами как профи. Так что давайте отправимся в это двоичное приключение вместе!
JavaScript Битовые операторы
Битовые операторы - это особые инструменты в JavaScript, которые позволяют нам работать с числами на уровне битов. Это означает, что мы имеем дело с 1 и 0, как это делают компьютеры изнутри. Может показаться пугающим, но поверьте мне, это на самом деле очень весело, как только вы惯етесь!
Прежде чем мы перейдем к деталям, давайте посмотрим на все битовые операторы, которые мы рассмотрим:
Оператор | Имя | Описание |
---|---|---|
& | AND | Устанавливает каждый бит в 1, если оба бита равны 1 |
| | OR | Устанавливает каждый бит в 1, если один из двух битов равен 1 |
^ | XOR | Устанавливает каждый бит в 1, если только один из двух битов равен 1 |
~ | NOT | Инвертирует все биты |
<< | Сдвиг влево | Сдвигает влево, добавляя нули справа |
>> | Сдвиг вправо | Сдвигает вправо, добавляя копии старшего бита слева |
>>> | Сдвиг вправо с заполнением нулями | Сдвигает вправо, добавляя нули слева |
Теперь давайте разберем их по одному!
JavaScript Битовый оператор AND (&)
Битовый оператор AND похож на очень strict охранника в эксклюзивном клубе. Он пропускает 1 только если оба входа равны 1. В противном случае, это 0. Давайте посмотрим на это в действии:
let a = 5; // 0101 в двоичной записи
let b = 3; // 0011 в двоичной записи
console.log(a & b); // 0001 в двоичной записи, что равно 1 в десятичной записи
В этом примере мы сравниваем 5 (0101) и 3 (0011) бит за битом. Только правый бит равен 1 в обоих числах, поэтому это единственный бит, который проходит. Результат - 0001, что равно 1 в десятичной записи.
JavaScript Битовый оператор OR (|)
Битовый оператор OR похож на более lenient охранника. Если один из входов равен 1, он пропускает его. Давайте посмотрим, как это работает:
let a = 5; // 0101 в двоичной записи
let b = 3; // 0011 в двоичной записи
console.log(a | b); // 0111 в двоичной записи, что равно 7 в десятичной записи
Здесь мы получаем 1 wherevereither 5 или 3 имеет 1, что приводит к 0111, что равно 7 в десятичной записи.
JavaScript Битовый оператор XOR (^)
Оператор XOR похож на странную party game, где вы можете войти только если надеваете шляпу или шарф, но не оба! Он возвращает 1 только если биты различаются. Проверьте это:
let a = 5; // 0101 в двоичной записи
let b = 3; // 0011 в двоичной записи
console.log(a ^ b); // 0110 в двоичной записи, что равно 6 в десятичной записи
Мы получаем 1, где биты различаются (второй и третий справа), что приводит к 0110, или 6 в десятичной записи.
JavaScript Битовый оператор NOT (~)
Оператор NOT похож на opposite day - он переворачивает все биты. Но есть один нюанс! В JavaScript он также инвертирует знак и вычитает 1. Давайте посмотрим:
let a = 5; // 0101 в двоичной записи
console.log(~a); // -6 в десятичной записи
Результат может удивить вас! Это потому, что JavaScript использует дополнение по модулю 2 для отрицательных чисел. Так что ~5 на самом деле -6.
Битовый оператор Сдвиг влево (<<)
Оператор Сдвиг влево похож на conveyer belt, который перемещает биты влево и добавляет нули справа. Каждый сдвиг эффективно удваивает число:
let a = 5; // 0101 в двоичной записи
console.log(a << 1); // 1010 в двоичной записи, что равно 10 в десятичной записи
console.log(a << 2); // 10100 в двоичной записи, что равно 20 в десятичной записи
Смотрите, как 5 становится 10 с одним сдвигом, и 20 с двумя сдвигами? Это как магия!
Битовый оператор Сдвиг вправо (>>)
Оператор Сдвиг вправо делает обратное, перемещая биты вправо. Он эффективно halved число (округляя вниз):
let a = 5; // 0101 в двоичной записи
console.log(a >> 1); // 0010 в двоичной записи, что равно 2 в десятичной записи
5 разделено на 2 равно 2.5, но мы округляем вниз до 2.
Битовый оператор Сдвиг вправо с заполнением нулями (>>:]
Этот оператор аналогичен >>, но он всегда заполняет нулями слева, даже для отрицательных чисел:
let a = -5; // 11111111111111111111111111111011 в двоичной записи (32-бит)
console.log(a >>> 1); // 01111111111111111111111111111101 в двоичной записи, что равно 2147483645 в десятичной записи
Этот оператор немного tricky! Он в основном используется, когда вам нужно treat число как беззнаковое.
И вот оно, ребята! Вы только что сделали свои первые шаги в мир битовых операций. Эти операторы могут показаться немного abstract сейчас, но они incredibly полезны для задач, таких как работа с двоичными данными, создание хэш-функций или оптимизация определенных алгоритмов.
Помните, что практика делает perfect. Попробуйте поиграть с этими операторами, и скоро вы будете bite через биты как профи! Счастливого кодирования и пусть биты будут с вами!
Credits: Image by storyset