Оператор побитового отрицания: ~

Побитовое отрицание возвращаемого значения (побитовое отрицание всех положительных целых чисел равно отрицательному значению самого себя + 1, побитовое отрицание всех отрицательных целых чисел является абсолютным значением самого себя + 1, а побитовое отрицание нуля равно -1. Среди них побитовая инверсия также принудительно возвращает возвращаемое значение, преобразуя строку 5 в число 5, а затем побитовую инверсию.Ложь преобразуется в 0, а истина преобразуется в 1.)

Одним словом: возвращаемое значение будет умножено на -1, а потом минус 1

~false === -1
~true === -2

indexOf обычно возвращает -1, если значение не найдено, но у меня это просто работает здесь

const arr = [1,2,3]
const index = arr.indexOf(4)
if(!~index) {
   console.log('No index found')
}

двойной битовый оператор ~~

Вместо положительных Math.floor( ) и отрицательных Math.ceil( ) можно использовать бинарные операторы. Преимущество битового оператора с двойным инвертированием состоит в том, что он выполняет ту же операцию быстрее.

Math.floor(4.9) === 4      //true
// Abbreviated as:
~~4.9 === 4      //true

Обратите внимание, однако, что для положительных чисел ~~результат Math.floor( )and такой же, как и для отрицательных чисел Math.ceil( ):

~~4.5                // 4
Math.floor(4.5)      // 4
Math.ceil(4.5)       // 5

~~-4.5          // -4
Math.floor(-4.5)     // -5
Math.ceil(-4.5)      // -4

оператор правой смены ››

оператор выполняет операцию сдвига вправо со знаком. В отличие от операции сдвига влево, она сдвигает все значащие биты вправо в 32-битном числе и заполняет пробел значением знакового бита. Значения, превышенные во время перемещения, отбрасываются.

Например: Предположим, мы перемещаем один бит вправо, он на самом деле делится на 2, а затем округляется в меньшую сторону, если мы перемещаем 2 бита, он делится на 4 и округляется в меньшую сторону, и так далее, в любом случае, это 2 в n-й степени. власть.

4 >> 1 // 2
9 >> 1 // 4
15 >> 2 // 3

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

То же, что и выше, здесь умножение, поэтому я не буду его объяснять.

+ знак плюс