Предыдущие слова
Операторы битов являются очень базовыми операциями и обычно не используются, потому что они не являются интуитивно понятными. Тем не менее, это очень быстро и может достичь хороших результатов при разумном использовании. Эта статья представит часто пропускаемый оператор в JavaScript - Bit Operator
Бинарное представление
Все значения в ECMascript хранятся в 64-битном формате IEEE-754, но оператор бита не работает напрямую управляет 64-разрядным значением, но рассчитывается как 32-разрядное подписанное целое число, а возвратное значение также является 32-разрядным подписанным целым числом.
Это преобразование бита позволяет рассматривать оба значения как 0 при применении битовых операций к специальным значениям NAN и Infinity
Если оператор бита применяется к нечисленному значению, значение будет преобразовано в числовое значение с использованием number (), а результат-числовое значение
// '|' ' означает бить или, целочисленное и 0 бить, или операция может получить себя, а десятичная и 0 бить или операция может получить консоль эффекта округления. 0); // 0console.log ('12px' | 0); // 0console.log ('12 '| 0); // 12Подписанное целое число использует первые 31 из 32-битного для представления целочисленного значения, 32-разрядное, чтобы представлять целочисленный символ, 0 представляет положительное число, а 1 представляет отрицательное число. Бит, представляющий символ, называется битом знака, а значение бита знака определяет формат других битовых значений. Среди них положительные числа хранятся в чистом двоичном формате, и каждый из 31 бит представляет собой силу 2. Первый бит (называемый бит 0) представляет 0 раз от 2, второй бит представляет 1 время 2 и т. Д. Неиспользуемые биты заполнены 0, то есть они игнорируются.
Например, двоичное представление численного значения 18 составляет 000000000000000000000000000010010, или более кратковременные 10010. Это 5 действительных битов, и эти 5 битов сами определяют фактическое значение
Console.log ((18) .toString (2)); // "10010"
Console.log (0B000000000000000000000000000000000010010); // 18
Отрицательные числа также хранятся в двоичном языке, но используемый формат находится в дополнении двух. Чтобы рассчитать комплемент численного двух, вам нужно пройти следующие 3 шага:
【1】 Найти двоичный код абсолютного значения этого числового значения
【2】 Найти двоичный обратный код, то есть заменить 0 на 1, замените 1 на 0
【3】 Полученный двоичный обратный код добавляется в 1
Например, чтобы определить бинарное представление -18, сначала необходимо получить бинарное представление 18, как показано ниже:
0000 0000 0000 0000 0000 0000 0001 0010
Далее, рассчитайте двоичный обратный код следующим образом:
1111 1111 1111 1111 1111 1111 1111 1110 1101
Наконец, добавьте 1 в двоичный обратный код, следующим образом:
1111 1111 1111 1111 1111 1111 1110 1101 1 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Следовательно, двоичное представление -18 равно 1111 1111 1111 1111 1111 1111 1111 1111 1110 1110
Ecmascript будет изо всех сил, чтобы скрыть всю эту информацию от нас. При выводе отрицательного числа в форме двоичной строки все, что мы видим, это то, что двоичному коду с абсолютным значением этого отрицательного числа предшествует отрицательный знак.
var num = -18; console.log (num.toString (2)); // ' -10010'
Оператор битов может выполнять 7 типов операций, включая бить без (не), бить и (и), бить и (или), бить эксклюзивным или (xor), левый, подписанный правый сдвиг и не знаковая правая сдвига.
Побитовое не (не)
Побитовой не оператор представлен волнистой линией (~). Результатом выполнения битового не оператора является возврат обратного кода значения. Его сущность заключается в минусе негативного значения операнда на 1
var num1 = 25; var num2 = ~ num1; console.log (num2); //-26
Вы можете получить эффект округления с двойным кусочком для целого числа; Вы можете получить эффект округления с двойным кусочком для десятичного десятичного.
console.log (~~ 3); // 3console.log (~~ 3.1); // 3console.log (~~ 3.9); // 3
Кубик и (и)
Побитый и оператор представлены символом суммы (&), который имеет два номера операторов. По сути, бить и операция заключается в том, чтобы выравнивать каждый бит из двух значений, а затем выполнять операцию и операцию на двух числах в одном и том же положении в соответствии с правилами в следующей таблице.
Бит первого значения результата бита второго значения 1 1 11 0 00 1 00 0 0 0 0
Побитовое и операция вернет 1 только в том случае, если соответствующие биты двух значений равны 1. Любой бит равен 0, а результат - 0.
var iresult = 25 и 3; console.log (iresult); // "1"
//Analysis is as follows 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
кубик или (или)
Побитый или оператор представлен вертикальным символом (|), а также два операнда. Побитовая или операция следует за следующей таблицей правды
Первое значение значения бита второго значения результат 1 1 11 0 10 1 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
BITHISE или операция возвращает 1, если один бит составляет 1, и только в случае оба бита 0.
var iresult = 25 | 3; console.log (iresult); // "27"
// Анализ следующим образом 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0000 0001 1011
Integer и 0 BITWAYS или OPERE могут получить его, а десятичная и 0 бить или операция может получить эффект округления
Console.log (3.1 | 0); // 3console.log (3.9 | 0); // 3
Кубик xor (xor)
Побитый оператор XOR представлен каретой (^) и имеет два операнда. Ниже приведена таблица истинности бить XOR
Бит первого значения бит второго значения 1 1 01 0 10 1 10 0 0 0
Возвращает 0, когда два значения бить XOR одинаковы, и возвращайте 1, когда не в то же время
var iresult = 25 ^ 3; console.log (iresult); // "26"
// Анализ следующим образом 25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0000 0001 1010
«Операция Exoroor» имеет особое использование, которое выполняет три операции XOR на двух числах A и B последовательно, Aˆ = B, Bˆ = A, Aˆ = B, и их значения могут быть заменены. Это означает, что использование «эксклюзивного или операции» может поменять значения двух переменных без введения временных переменных
var a = 10, b = 9; a ^= b, b ^= a, a ^= b; console.log (a, b); // 9,10
//Analysis is as follows a = 0000 0000 0000 0000 0000 0000 0000 0000 1010 b = 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0011 b = 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0 1001----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Интеллект с 0 бить XOR может сохранить себя, а десятичный десятичный цвет с 0 бить XOR может быть округлен
Console.log (3.1 ^ 0); // 3console.log (3.9 ^ 0); // 3
Двигаться влево
Оператор левой смены представлен на два меньше, чем знаки (<<). Этот оператор переместит все биты значения влево на указанное количество битов.
Например, если значение 2 (двоичный код равен 10) сдвинуто на 5 бит влево, результат - 64 (1000000)
var oldvalue = 2; var newvalue = oldvalue << 5; console.log (newvalue); // 64
Движение влево не повлияет на знак операнда. Другими словами, если -2 перемещается на 5 бит слева, результат будет -64
var oldvalue = -2; var newvalue = oldvalue << 5; console.log (newvalue); // -64
Левый сдвиг 0 битов может достичь эффекта округления
console.log (3.1 << 0); // 3console.log (3.9 << 0); // 3
Подписано правильно
Подписанный оператор правого сдвига представлен двумя большими, чем знаки (>>), что перемещает значение вправо, но сохраняет биты знака (то есть знаки знаков). Подписанная операция правой сдвига является точно противоположностью операции левой сдвига, то есть, если 64 перемещается на 5 битов справа, результат будет изменен на 2.
var oldvalue = 64; var newvalue = oldvalue >> 5; console.log (newvalue); // 2
Точно так же во время процесса смещения вакансия также появится в исходном значении. Однако на этот раз вакансия появляется на левой стороне исходного значения и на правой стороне бита знака. В настоящее время Ecmascript заполнит все пустые пространства со значением бита знака, чтобы получить полное значение
Двигайтесь вправо, чтобы имитировать работу Divisor 2
Console.log (5 >> 1); // 2 anconsole.log (15 >> 1); // 7
Без подписи права
Оператор правого сдвига без знака представлен на 3 больше, чем знаки (>>>), который перемещает все 32 бита значения вправо. Для положительных чисел результат неподписанной правой сдвига такой же, как и подписанный правый сдвиг. Удобно перемещать знак прямо перед ним. Если вы перемещаете без знака 64 на 5 бит, результат все еще 2
var oldvalue = 64; var newvalue = oldvalue >>> 5; console.log (newvalue); // 2
Однако отрицательное число отличается. Во -первых, неподписанный правый сдвиг заполняет пустой бит 0, вместо того, чтобы заполнять пустой бит значением подписанного бита, как подписанный правый сдвиг. Следовательно, результат неподписанного правого сдвига к положительному числу такой же, как и результат сдвига заголовка на заголовок, но результат отрицательного числа отличается. Во -вторых, оператор правой смены без знака будет рассматривать отрицательный двоичный код как положительный двоичный код. Более того, поскольку отрицательное число представлено в дополнении двух его абсолютного значения, результат будет очень большим после неподписанной правой сдвига.
var oldvalue = -64; var newvalue = oldvalue >>> 5; console.log (newvalue) // 134217726
Чтобы определить бинарное представление -64, вы должны сначала получить бинарное представление 64, как показано ниже:
0000 0000 0000 0000 0000 0000 0100 0000
Далее, рассчитайте двоичный обратный код следующим образом:
1111 1111 1111 1111 1111 1111 1111 1011 11111
Наконец, добавьте 1 в двоичный обратный код, как показано ниже
1111 1111 1111 1111 1111 1111 1111 1011 1111 1----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
После перемещения 5 бит вправо, как показано ниже:
0000 0111 1111 1111 1111 1111 11111 11111 1110Console.Log (0B000001111111111111111111111111111111Ж11111Я111110); // 1342177726
Общие приложения
【1】 Несколько операций
Используйте левую смену (<<), чтобы реализовать операцию умножения
Console.log (2 << 1); // 4console.log (3 << 1); // 6console.log (4 << 1); // 8
【2】 Разделяйте операцию
Используйте подписанный правый сдвиг (>>), чтобы имитировать работу Divisor 2
Console.log (2 >> 1); // 1console.log (5 >> 1); // 2console.log (8 >> 1); // 4console.log (9 >> 1); // 4console.log (9 >> 1); // 4
【3】 Значение обмен
Эффект обмена значения может быть достигнут с использованием операции XOR (^)
var a = 10, b = 9; a ^= b, b ^= a, a ^= b; console.log (a, b); // 9,10
【4】 Суммируйте десятичное значение
Десятичный эффект округления может быть достигнут, взяв два побитовых небита, 0 побитового или 0 бить, или 0 битов влево и 0 битов вправо.
console.log (~~ 3.1); // 3console.log (3.1 | 0); // 3console.log (3.1^0); // 3console.log (3.1 << 0); // 3console.log (3.1 >> 0); // 3console.log (3.1 >> 0); // 3
【5】 Переключатель
Оператор битов может использоваться в качестве переключателя для установки свойств объекта. Предположим, что объект имеет четыре переключателя, каждый переключатель является переменной. Затем вы можете установить четырехбитовый двоичный номер, каждый из которых соответствует переключателю.
var flag_a = 1; // 0001var flag_b = 2; // 0010var flag_c = 4; // 0100var flag_d = 8; // 1000
Приведенный выше код устанавливает четыре переключателя A, B, C и D, каждый коммутатор имеет двоичный бит соответственно.
Теперь предположим, что три переключателя ABD необходимо включить, мы можем построить переменную маски
var mask = flag_a | Flag_b | Flag_d; // 0001 | 0010 | 1000 => 1011
Приведенный выше код выполняет «или операцию» на трех переменных ABD, чтобы получить 1011 с значением бинарного маски.
// «Операция» гарантирует, что указанный переключатель включен на флаги = флаги | маска;
// «Ассоциация» может отключить все элементы в текущих настройках, которые отличаются от настройки коммутатора. Флаги = Флаги и Маска;
// «Эксклюзивная или операция» может перейти на (переключать) текущую настройку, то есть обратное значение текущего настройки может быть получено в первый раз, и исходное значение может быть получено снова. Флаги = флаги ^ Маска;
// «Нет операции» может перевернуть текущую настройку, то есть исходная настройка равна 0, и она становится 1 после операции; исходная настройка составляет 1, и она становится 0 флаг после операции = ~ флага;
Вышеуказанное всеобъемлющее введение в оператор JavaScript - оператор битов - это весь контент, разделенный редактором. Я надеюсь, что это может дать вам ссылку, и я надеюсь, что вы будете поддерживать Wulin.com больше.