코딩 스쿨 JavaScript

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP
▶ JavaScript Tutorial
JavaScript HOME
JavaScript Introduction
JavaScript Where To
JavaScript Output
JavaScript Statements
JavaScript Syntax
JavaScript Comments
JavaScript Variables
JavaScript Let
JavaScript Const
JavaScript Operators
JavaScript Arithmetic
JavaScript Assignment
JavaScript Data Types
JavaScript Functions
JavaScript Objects
JavaScript Object Properties
JavaScript Object Methods
JavaScript Object Display
JavaScript Object Constructors
JavaScript Events
JavaScript Strings
JavaScript String Methods
JavaScript String Search
JavaScript String Templates
JavaScript Numbers
JavaScript BigInt
JavaScript Number Methods
JavaScript Number Properties
JavaScript Arrays
JavaScript Array Methods
JavaScript Array Search
JavaScript Array Sort
JavaScript Array Iteration
JavaScript Array Const
JavaScript Dates
JavaScript Date Formats
JavaScript Date Get Methods
JavaScript Date Set Methods
JavaScript Math
JavaScript Random
JavaScript Booleans
JavaScript Comparisons
JavaScript If Else
JavaScript Switch
JavaScript Loop For
JavaScript Loop For In
JavaScript Loop For Of
JavaScript Loop While
JavaScript Break
JavaScript Iterables
JavaScript Sets
JavaScript Set Methods
JavaScript Maps
JavaScript Map Methods
JavaScript Typeof
JavaScript Type Conversion
JavaScript Destructuring
JavaScript Bitwise
JavaScript RegExp
JavaScript Precedence
JavaScript Errors
JavaScript Scope
JavaScript Hoisting
JavaScript Strict Mode
JavaScript this Keyword
JavaScript Arrow Function
JavaScript Classes
JavaScript Modules
JavaScript JavaScriptON
JavaScript Debugging
JavaScript Style Guide
JavaScript Best Practices
JavaScript Mistakes
JavaScript Performance
JavaScript Reserved Words

JavaScript Bitwise

JavaScript Bitwise: 비트 연산자의 이해와 활용

JavaScript 비트 연산자(bitwise operators)는 숫자를 **이진수(bit)**로 변환한 후 비트 단위로 연산하는 연산자입니다. 비트 연산은 컴퓨터가 데이터를 가장 기본적으로 처리하는 방식 중 하나로, 낮은 수준의 연산을 효율적으로 수행할 수 있습니다. 비트 연산자는 일반적으로 정수형 값에 적용됩니다.

이 가이드는 JavaScript에서 사용할 수 있는 비트 연산자와 그 활용 방법을 설명합니다.


1. 비트 연산의 기본 개념

JavaScript의 비트 연산자32비트 부호 있는 정수로 변환된 후 비트 단위로 처리됩니다. 비트 연산을 적용할 때, 숫자는 **이진수(binary)**로 변환되어 각 비트의 값이 연산됩니다.

이진수 예시

const num = 5;  // 10진수 5는 이진수로 101


2. 비트 연산자의 종류

2.1. AND (&)

AND 연산자는 두 비트가 모두 1일 때 1을 반환하고, 그렇지 않으면 0을 반환합니다.

const a = 5;    // 5는 이진수로 101
const b = 3;    // 3은 이진수로 011
const result = a & b;

console.log(result);  // 출력: 1 (이진수 001)

a b a & b
1 1 1
0 1 0
1 0 0

2.2. OR (|)

OR 연산자는 두 비트 중 하나라도 1이면 1을 반환하고, 둘 다 0이면 0을 반환합니다.

const a = 5;    // 5는 이진수로 101
const b = 3;    // 3은 이진수로 011
const result = a | b;

console.log(result);  // 출력: 7 (이진수 111)

| a | b | a | b | | --- | --- | --- | | 1 | 1 | 1 | | 0 | 1 | 1 | | 1 | 0 | 1 | | 0 | 0 | 0 |

2.3. XOR (^)

XOR 연산자는 두 비트가 서로 다를 때 1을 반환하고, 같으면 0을 반환합니다.

const a = 5;    // 5는 이진수로 101
const b = 3;    // 3은 이진수로 011
const result = a ^ b;

console.log(result);  // 출력: 6 (이진수 110)

a b a ^ b
1 1 0
0 1 1
1 0 1
0 0 0

2.4. NOT (~)

NOT 연산자는 비트 반전을 수행합니다. 즉, 01로, 10으로 변환됩니다. 이 연산자는 숫자의 모든 비트를 뒤집습니다.

const a = 5;    // 5는 이진수로 101
const result = ~a;

console.log(result);  // 출력: -6

NOT 연산의 결과는 음수로 나타나는 이유는 2의 보수(Two's Complement) 표현 방식 때문입니다.

2.5. 왼쪽 시프트 (<<)

왼쪽 시프트(Left Shift) 연산자는 비트를 왼쪽으로 지정된 수만큼 이동시키며, 오른쪽에서 빈 자리는 0으로 채웁니다.

const a = 5;    // 5는 이진수로 101
const result = a << 1;  // 왼쪽으로 1비트 이동

console.log(result);  // 출력: 10 (이진수 1010)

2.6. 오른쪽 시프트 (>>)

오른쪽 시프트(Right Shift) 연산자는 비트를 오른쪽으로 지정된 수만큼 이동시키며, 왼쪽에서 빈 자리는 부호 비트로 채워집니다. 즉, 양수는 0으로, 음수는 1으로 채웁니다.

const a = 5;    // 5는 이진수로 101
const result = a >> 1;  // 오른쪽으로 1비트 이동

console.log(result);  // 출력: 2 (이진수 10)

2.7. 부호 없는 오른쪽 시프트 (>>>)

부호 없는 오른쪽 시프트는 부호 비트가 없는 오른쪽 시프트 연산입니다. 빈 자리는 항상 0으로 채워집니다.

const a = -5;
const result = a >>> 1;

console.log(result);  // 출력: 2147483645


3. 비트 연산 활용 예시

3.1. 짝수와 홀수 구분

비트 연산을 사용하여 짝수홀수를 빠르게 구분할 수 있습니다. & 1 연산을 통해 숫자의 마지막 비트가 1이면 홀수, 0이면 짝수입니다.

function isOdd(num) {
    return (num & 1) === 1;
}

console.log(isOdd(5));  // 출력: true (홀수)
console.log(isOdd(8));  // 출력: false (짝수)

3.2. 값을 두 배로 만들기 (왼쪽 시프트)

왼쪽 시프트(<<) 연산을 사용하면 값을 빠르게 2배로 만들 수 있습니다.

const a = 5;
const result = a << 1;

console.log(result);  // 출력: 10

3.3. 값 나누기 (오른쪽 시프트)

오른쪽 시프트(>>) 연산을 사용하면 값을 2로 나눌 수 있습니다.

const a = 10;
const result = a >> 1;

console.log(result);  // 출력: 5


4. 비트 연산과 실무 활용

비트 연산은 컴퓨터 과학과 프로그래밍의 여러 분야에서 성능을 최적화하거나, 효율적으로 데이터를 처리하는 데 사용됩니다. 다음은 실무에서 비트 연산이 사용되는 몇 가지 사례입니다.

4.1. 권한 관리

비트 연산을 사용하여 권한 관리를 할 수 있습니다. 각 비트는 특정 권한을 나타내며, 이를 통해 여러 권한을 하나의 숫자로 저장하고 관리할 수 있습니다.

const READ = 1;    // 001
const WRITE = 2;   // 010
const EXECUTE = 4; // 100

let permission = READ | WRITE;  // 읽기 + 쓰기 권한

// 권한 확인
const hasWritePermission = (permission & WRITE) !== 0;
console.log(hasWritePermission);  // 출력: true

// 실행 권한 추가
permission |= EXECUTE;
console.log(permission);  // 출력: 7 (111)

4.2. 플래그 처리

비트 연산은 플래그 처리를 할 때 자주 사용됩니다. 여러 상태 값을 하나의 숫자로 결합하여 메모리를 절약하고, 상태를 쉽게 관리할 수 있습니다.

const FLAG_A = 1;  // 001
const FLAG_B = 2;  // 010
const FLAG_C = 4;  // 100

let flags = FLAG_A | FLAG_B;  // 플래그 A와 B 활성화

// 플래그 C 활성화
flags |= FLAG_C;
console.log(flags);  // 출력: 7 (111)

// 플래그 B 제거
flags &= ~FLAG_B;
console.log(flags);  // 출력: 5 (101)


요약

  • 비트 연산자는 숫자를 이진수로 변환한 후 비트 단위로 연산하는 연산자입니다.

copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com