이전 단어
비트 연산자는 매우 근본적인 작업이며 직관적이지 않기 때문에 일반적으로 사용되지 않습니다. 그러나 매우 빠르며 합리적으로 사용하면 좋은 결과를 얻을 수 있습니다. 이 기사는 JavaScript -Bit Operator에서 자주 간과되는 연산자를 소개합니다.
이진 표현
ECMAScript의 모든 값은 IEEE-754 64 비트 형식으로 저장되지만 비트 연산자는 64 비트 값을 직접 작동하지 않지만 32 비트 서명 정수로 계산되며 반환 값은 32 비트 서명 정수이기도합니다.
이 비트 변환은 특수 NAN 및 무한대 값에 비트 작업을 적용 할 때 두 값을 0으로 처리 할 수 있도록합니다.
비트 연산자가 숫자가 아닌 값에 적용되면 값은 숫자 ()를 사용하여 숫자 값으로 변환되며 결과는 숫자 값입니다.
// '|' 비트 방향 또는 정수 및 0 비트 또는 작동은 자체를 얻을 수 있으며, 소수점과 0 비트 또는 작동은 반올림 효과 콘솔 (1.3 | 0); // 1console.log (1.8 | 0); // 1console.log (Infinity | 0); // 0console.log (-infinity | 0); // 0console.log (nan); 0); // 0console.log ( '12px'| 0); // 0console.log ('12 '| 0); // 12서명 된 정수는 32 비트 중 첫 31을 사용하여 정수 값을 나타내고, 32 비트는 정수 기호를 나타내며, 0은 양수를 나타내고, 1은 음수를 나타냅니다. 기호를 나타내는 비트를 부호 비트라고하며 부호 비트의 값은 다른 비트 값의 형식을 결정합니다. 그중에서도 양수는 순수한 이진 형식으로 저장되고, 31 비트는 각각 2의 전력을 나타냅니다. 첫 번째 비트 (비트 0이라고 함)는 2의 0 배, 두 번째 비트는 1 시간 2 등을 나타냅니다. 사용하지 않는 비트는 0으로 채워져 있습니다. 즉, 무시됩니다.
예를 들어, 숫자 값 18의 이진 표현은 0000000000000000000000000000000010010 또는 더 간결한 10010입니다. 5 개의 유효한 비트이며,이 5 비트 자체는 실제 값을 결정합니다.
Console.log ((18) .ToString (2)); // "10010"
Console.log (0B00000000000000000000000000000000000010010); // 18
음수는 이진에도 저장되지만 사용 된 형식은 2의 보완입니다. 수치 2의 보완 물을 계산하려면 다음 3 단계를 거쳐야합니다.
【1 the이 숫자 값의 절대 값의 이진 코드를 찾으십시오.
【2 b 바이너리 역 코드를 찾으십시오.
【3 b 획득 된 바이너리 역 코드가 1에 추가됩니다
예를 들어, -18의 이진 표현을 결정하려면 먼저 아래에 표시된 것처럼 이진 표현을 18의 이진 표현을 가져와야합니다.
0000 0000 0000 0000 0000 0000 0001 0010
다음으로 이진 역 코드를 다음과 같이 계산하십시오.
1111 11111111111111111111111101
마지막으로 다음과 같이 바이너리 역 코드에 1을 추가하십시오.
1111111111111111111111111101 1------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
따라서 -18의 이진 표현은 11111111111111111111111111111110입니다.
ECMAScript는이 모든 정보를 우리에게 숨기려고 최선을 다할 것입니다. 바이너리 스트링 형태로 음수를 출력 할 때, 우리가 보는 것은이 음수의 절대 값을 가진 이진 코드가 음수 부호가 선행된다는 것입니다.
var num = -18; console.log (num.tostring (2)); // '-10010'
비트 연산자는 비트가 아닌 (NOT), BitWise 및 (및), BitWise 또는 (OR), BitWise 독점 또는 (XOR), 왼쪽 시프트, 서명 된 오른쪽 시프트 및 서명되지 않은 오른쪽 이동을 포함하여 7 가지 유형의 작업을 수행 할 수 있습니다.
비트 비트 비 (NOT)
비트 비 기능은 물결 모양의 선 (~)으로 표시됩니다. Bitwise Non-Operator를 실행 한 결과는 값의 역 코드를 반환하는 것입니다. 그 본질은 피연산자의 음수 값을 1만큼 빼는 것입니다.
var num1 = 25; var num2 = ~ num1; console.log (num2); //-26
정수에 대해 이중 비트로 반올림 효과를 얻을 수 있습니다. 소수점에 대해 이중 비트로 반올림 효과를 얻을 수 있습니다.
Console.log (~~ 3); // 3console.log (~~ 3.1); // 3console.log (~~ 3.9); // 3
비트와 (그리고)
비트와 연산자는 합계 기호 (&)로 표시되며 두 개의 연산자 번호가 있습니다. 기본적으로 비트와 작동은 각 비트의 각 비트를 두 값의 정렬 한 다음 다음 표의 규칙에 따라 같은 위치에서 두 숫자로 AN 및 작업을 수행하는 것입니다.
두 번째 값 비트의 첫 번째 값 비트 결과 1 1 11 0 00 1 00 0 0 0 0
비트 와이드와 작동은 두 값의 해당 비트가 1 인 경우에만 1을 반환합니다. 비트는 0이고 결과는 0입니다.
var iresult = 25 & 3; console.log (iresult); // "1"
// 분석은 다음과 같습니다. 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
bitwise 또는 (또는)
비트 또는 연산자는 수직 기호 (|)로 표시되며 두 개의 피연산자도 있습니다. 비트 또는 작전은 다음 진실 테이블을 따릅니다
두 번째 값 비트의 첫 번째 값 비트 결과 1 11 0 10 1 10 0 0 0
비트가 1이면 1이면 1이고 두 비트가 모두 0 인 경우에만 비트 또는 작동이 반환됩니다.
var Iresult = 25 | 3; console.log (Iresult); // "27"
// 분석은 다음과 같습니다.
정수 및 0 비트 또는 작동이 발생할 수 있으며 소수점과 0 비트 또는 작동은 반올림 효과를 얻을 수 있습니다.
Console.log (3.1 | 0); // 3Console.log (3.9 | 0); // 3
Bitwise XOR (XOR)
Bitwise XOR 연산자는 CARET (^)로 표시되며 2 개의 피연산자가 있습니다. 다음은 Bitwise Xor의 진실 테이블입니다
첫 번째 값의 비트 두 번째 값의 비트 1 1 01 0 10 1 10 0 0 0
Bitwise XOR의 두 값이 동일 할 때 0을 반환하고 동시에하지 않으면 1을 반환합니다.
var iresult = 25 ^ 3; console.log (iresult); // "26"
// 분석은 다음과 같습니다.
"Exoroor Operation"은 특별한 사용을 가지고 있으며, 이는 두 개의 숫자 a와 b에 대해 3 개의 xor 작업을 수행합니다. 즉, "독점 또는 작동"을 사용하면 임시 변수를 도입하지 않고 두 변수의 값을 교환 할 수 있습니다.
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 000000 0 1001----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
비트 와시 xor가 0 인 정수는 스스로를 유지할 수 있고 0 Bitwise XOR의 소수점을 반올림 할 수 있습니다.
Console.log (3.1 ^ 0); // 3Console.log (3.9 ^ 0); // 3
왼쪽으로 이동하십시오
왼쪽 시프트 연산자는 표지판보다 2 개의 덜 표시됩니다 (<<). 이 연산자는 지정된 비트 수로 값의 모든 비트를 왼쪽으로 이동합니다.
예를 들어, 값 2 (이진 코드가 10 인 경우)가 왼쪽으로 5 비트로 이동하면 결과는 64 (10000000)입니다.
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는 모든 빈 공간을 부호 비트 값으로 채우려면 완전한 값을 얻습니다.
오른쪽으로 이동하여 2의 제수 작업을 시뮬레이션하십시오
Console.log (5 >> 1); // 2console.log (15 >> 1); // 7
서명되지 않은 오른쪽
서명되지 않은 오른쪽 시프트 연산자는 표지판보다 3 큰 3으로 표시되며, 이는 오른쪽으로 32 비트의 값을 모두 움직입니다. 양수의 경우, 서명되지 않은 올바른 이동의 결과는 서명 된 올바른 이동과 동일합니다. 표지판을 바로 앞에서 옮기는 것이 편리합니다. 서명되지 않은 64 x 5 비트를 움직이면 결과는 여전히 2입니다.
var OldValue = 64; var newValue = OldValue >>> 5; console.log (newValue); // 2
그러나 음수는 다릅니다. 먼저, 서명되지 않은 오른쪽 시프트는 빈 비트를 0으로 채우고, 서명 된 오른쪽 시프트와 같은 서명 된 비트의 값으로 빈 비트를 채우는 대신 0으로 채워집니다. 따라서 서명되지 않은 올바른 숫자로의 결과는 제목으로 제목으로 이동 한 결과와 동일하지만 음수의 결과는 다릅니다. 둘째, 서명되지 않은 오른쪽 시프트 연산자는 네거티브 바이너리 코드를 양수 이진 코드로 취급합니다. 또한, 음수는 절대 값을 보완하는 두 가지 보완에 표시되므로, 서명되지 않은 올바른 이동 후에 결과는 매우 커질 것입니다.
var OldValue = -64; var newValue = OldValue >>> 5; console.log (newValue) // 134217726
-64의 이진 표현을 결정하려면 먼저 아래와 같이 바이너리 표현을 64로 가져와야합니다.
0000 0000 0000 0000 0000 0000 0100 0000
다음으로 이진 역 코드를 다음과 같이 계산하십시오.
1111 1111111111111111111111111111
마지막으로 아래 그림과 같이 바이너리 역 코드에 1을 추가하십시오.
1111 1111 1111 1111 1111 1111 1111 1011 1111 1----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
아래와 같이 5 비트를 오른쪽으로 이동 한 후 :
0000 01111111111111111111111111 1110Console.Log (0B00000111111111111111111111111111111111111111111111111111111111110); // 134217726
일반적인 응용 프로그램
【1 operation 다중 작업
곱셈 작업을 실현하려면 왼쪽 시프트 (<<)를 사용하십시오
Console.log (2 << 1); // 4console.log (3 << 1); // 6console.log (4 << 1); // 8
【2 ide 작업을 분할하십시오
서명 된 올바른 시프트 (>>)를 사용하여 2의 제수 작업을 시뮬레이션하십시오.
Console.log (2 >> 1); // 1console.log (5 >> 1); // 2console.log (8 >> 1); // 4console.log (9 >> 1); // 4console.log (9 >> 1); // 4
【3 sw 값 스왑
xor 작동 (^)을 사용하여 값 인터체인지의 효과를 달성 할 수 있습니다.
var a = 10, b = 9; a ^= b, b ^= a, a ^= b; console.log (a, b); // 9,10
【4 ar 소수점을 요약합니다
10 진수 반올림 효과는 0 비트, 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. 스위치
비트 연산자는 객체 속성을 설정하기위한 스위치로 사용할 수 있습니다. 객체에 4 개의 스위치가 있다고 가정하면 각 스위치는 변수입니다. 그런 다음 4 비트 이진 번호를 설정할 수 있으며 각 바이너리 숫자는 스위치에 해당합니다.
var flag_a = 1; // 0001var flag_b = 2; // 0010var flag_c = 4; // 0100var flag_d = 8; // 1000
위의 코드는 4 개의 스위치 A, B, C 및 D를 설정하고 각 스위치에는 각각 이진 비트가 있습니다.
이제 3 개의 ABD 스위치를 켜야한다고 가정하면 마스크 변수를 구성 할 수 있습니다.
var mask = flag_ | flag_b | flag_d; // 0001 | 0010 | 1000 => 1011
위의 코드는 이진의 마스크 값으로 1011을 얻기 위해 세 가지 변수 ABD에서 "또는 작동"을 수행합니다.
// "작동"은 지정된 스위치가 켜지도록합니다. 플래그 = 플래그 | 마스크;
// "Association"은 스위치 설정과 다른 현재 설정의 모든 항목을 해제 할 수 있습니다. 깃발 = 깃발 및 마스크;
// "독점 또는 조작"은 현재 설정으로 전환 (토글)을 전환 할 수 있습니다. 즉, 현재 설정의 역 값을 처음으로 얻을 수 있으며 원래 값은 다시 실행하여 얻을 수 있습니다. 플래그 = 플래그 ^ 마스크;
// "작동 없음"은 현재 설정을 뒤집을 수 있습니다. 즉, 원래 설정은 0이고 작동 후 1이됩니다. 원래 설정은 1이고 작동 = ~ 플래그 후에 0flags가됩니다.
위의 포괄적 인 소개 JavaScript 연산자 - 비트 연산자는 편집기가 공유하는 전체 컨텐츠입니다. 나는 그것이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원하기를 바랍니다.