diff --git a/1-js/2-first-steps/10-bitwise-operators/1-bitwise-operator-value/solution.md b/1-js/2-first-steps/10-bitwise-operators/1-bitwise-operator-value/solution.md deleted file mode 100644 index bf0e32fd..00000000 --- a/1-js/2-first-steps/10-bitwise-operators/1-bitwise-operator-value/solution.md +++ /dev/null @@ -1,6 +0,0 @@ -
`a` | -`b` | -результат | -
---|---|---|
`0` | `0` | `0` |
`0` | `1` | `1` |
`1` | `0` | `1` |
`1` | `1` | `0` |
Оператор | -Использование | -Описание | - -
---|---|---|
Побитовое И (AND) | -a & b |
-Ставит 1 на бит результата, для которого соответствующие биты операндов равны 1. | -
Побитовое ИЛИ (OR) | -a | b |
-Ставит 1 на бит результата, для которого хотя бы один из соответствующих битов операндов равен 1. | -
Побитовое исключающее ИЛИ (XOR) | -a ^ b |
-Ставит 1 на бит результата, для которого только один из соответствующих битов операндов равен 1 (но не оба). | -
Побитовое НЕ (NOT) | -~a |
-Заменяет каждый бит операнда на противоположный. | -
Левый сдвиг | -`a << b` | -Сдвигает двоичное представление a на b битов влево, добавляя справа нули. |
-
Правый сдвиг, переносящий знак | -`a >> b` | -Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты. |
-
Правый сдвиг с заполнением нулями | -`a >>> b` | -Сдвигает двоичное представление a на b битов вправо, отбрасывая сдвигаемые биты и добавляя нули слева. |
-
`a` | `b` | `a & b` |
---|---|---|
`0` | `0` | `0` |
`0` | `1` | `0` |
`1` | `0` | `0` |
`1` | `1` | `1` |
a,b
равен 1.
-
-Таблица истинности для `|`:
-
-`a` | `b` | `a | b` |
---|---|---|
`0` | `0` | `0` |
`0` | `1` | `1` |
`1` | `0` | `1` |
`1` | `1` | `1` |
a
Исключающее ИЛИ b
равно 1, если только a=1
или только b=1
, но не оба одновременно a=b=1
.
-
-Таблица истинности для исключающего ИЛИ:
-
-`a` | `b` | `a ^ b` |
---|---|---|
`0` | `0` | `0` |
`0` | `1` | `1` |
`1` | `0` | `1` |
`1` | `1` | `0` |
`a` | `~a` |
---|---|
`0` | `1` |
`1` | `0` |
2
:
-
-```js
-//+ no-beautify
-9 (по осн.10)
- = 00000000000000000000000000001001 (по осн.2)
- --------------------------------
-9 >> 2 (по осн.10)
- = 00000000000000000000000000000010 (по осн.2)
- = 2 (по осн.10)
-```
-
-Операция `>> 2` сдвинула вправо и отбросила два правых бита `01` и добавила слева две копии первого бита `00`.
-
-Аналогично, `-9 >> 2` даст `-3`:
-
-```js
-//+ no-beautify
--9 (по осн.10)
- = 11111111111111111111111111110111 (по осн.2)
- --------------------------------
--9 >> 2 (по осн.10)
- = 11111111111111111111111111111101 (по осн.2) = -3 (по осн.10)
-```
-
-Здесь операция `>> 2` сдвинула вправо и отбросила два правых бита `11` и добавила слева две копии первого бита `11`. , Знак числа сохранён, так как крайний-левый (знаковый) бит сохранил значение `1`.
-
-[smart header="Правый сдвиг почти равен целочисленному делению на 2"]
-Битовый сдвиг `>> N` обычно имеет тот же результат, что и целочисленное деление на два `N` раз:
-
-```js
-//+ run
-alert( 100 >> 1 ); // 50, деление на 2
-alert( 100 >> 2 ); // 25, деление на 2 два раза
-alert( 100 >> 3 ); // 12, деление на 2 три раза, целая часть от результата
-```
-
-[/smart]
-
-
-### >>> (Правый сдвиг с заполнением нулями)
-
-Этот оператор сдвигает биты первого операнда вправо. Лишние биты справа отбрасываются. Слева добавляются нулевые биты.
-
-Знаковый бит становится равным 0, поэтому результат всегда положителен.
-
-**Для неотрицательных чисел правый сдвиг с заполнением нулями `>>>` и правый сдвиг с переносом знака `>>` дадут одинаковый результат, т.к в обоих случаях слева добавятся нули.**
-
-Для отрицательных чисел -- результат работы разный. Например, `-9 >>> 2` даст `1073741821`, в отличие от `-9 >> 2` (дает `-3`):
-
-```js
-//+ no-beautify
--9 (по осн.10)
- = 11111111111111111111111111110111 (по осн.2)
- --------------------------------
--9 >>> 2 (по осн.10)
- = 00111111111111111111111111111101 (по осн.2)
- = 1073741821 (по осн.10)
-```
-
-## Применение побитовых операторов
-
-Побитовые операторы используются редко, но всё же используются.
-
-Случаи применения побитовых операторов, которые мы здесь разберём, составляют большинство всех использований в JavaScript.
-
-[warn header="Осторожно, приоритеты!"]
-В JavaScript побитовые операторы `^`, `&`, `|` выполняются после сравнений `==`.
-
-Например, в сравнении `a == b^0` будет сначала выполнено сравнение `a == b`, а потом уже операция `^0`, как будто стоят скобки `(a == b)^0`.
-
-Обычно это не то, чего мы хотим. Чтобы гарантировать желаемый порядок, нужно ставить скобки: `a == (b^0)`.
-[/warn]
-
-### Маска
-
-Для этого примера представим, что наш скрипт работает с пользователями.
-
-У них могут быть различные роли в проекте:
-
-Пользователь | -Просмотр статей | -Изменение статей | -Просмотр товаров | -Изменение товаров | -Управление правами | -
---|---|---|---|---|---|
Гость | -Да | -Нет | -Да | -Нет | -Нет | -
Редактор | -Да | -Да | -Да | -Да | -Нет | -
Админ | -Да | -Да | -Да | -Да | -Да | -
Пользователь | -Просмотр статей | -Изменение статей | -Просмотр товаров | -Изменение товаров | -Управление правами | -В 10-ной системе | -
---|---|---|---|---|---|---|
Гость | -1 | -0 | -1 | -0 | -0 | -= 20 | -
Редактор | -1 | -1 | -1 | -1 | -0 | -= 30 | -
Админ | -1 | -1 | -1 | -1 | -1 | -= 31 | -
2b
.
-
-```js
-//+ run
-alert( 8 >> 2 ); // 2 = 8/4, убрали 2 нуля в двоичном представлении
-alert( 11 >> 2 ); // 2, целочисленное деление (менее значимые биты просто отброшены)
-```
-
-## Итого
-
-a > b
, a < b
.a >= b
, a <= b
.≠
, в JavaScript -- знак равенства с восклицательным знаком перед ним !=
.a > b
, a < b
.a >= b
, a <= b
.≠
, in JavaScript we use an assignment with an exclamation before it: a != b
.