본문 바로가기
JavaScript

JavaScript - 비트마스킹 적용하기 (Feat.비트연산자)

by 새발개발JA 2023. 10. 12.
반응형

 

 

비트 마스킹이란

비트마스킹은 비트의 특성을 이용하여 이진수로 표현하는 자료구조 기법이다.

어려워 보이지만 결국은 다 배우고 익힌 것들의 조합이다.

 

비트는 0, 1 로 이루어진 이진수이다.

- 이진수는 0 또는 1 을 사용하므로 하나의 비트(bit)가 표현할 수 있는 경우는 두 가지이다.

- 비트가 1이면 "켜져 있다(true)", 0이면 "꺼져 있다(false)" 라고 표현한다.

 

쉽게 말해서 배열을

[true, false, true, true] 이런식으로 표현하게 되면 메모리의 4 공간에 저장된다

1011 이런 식으로 표현하게 되면 메모리의 1공간 만을 차지하게 되는 셈이라 더 효율적이다.

그래서 비트마스킹 기법은 더 빠른 수행, 간결한 코드, 적은 메모리 사용의 장점이 있다.

 

 

 

비트 마스킹 적용하기

나의 미션은 게시판에서 첫 작성글 여부를 알아내야 하는 일이었다.

일단 게시글 count === 0 으로 판단하려 했지만, 작성자가 스스로 글을 삭제하면 count === 0 으로 오동작을 하게 된다.

 

그래서 첫 게시글을 업로드한 직후, 플래그가 걸린 비트 값을 서버에 보내주고,

유저가 본인의 게시글로 들어왔을 떄  서버는 비트값이 포함된 base 라는 값을 주면서

"이 값 안에 플래그가 걸린 값이 있는지 확인해봐" 라고 말한다.

 

base 라는 비트와 첫 게시물에 대한 비트(first)를 비교해서 첫 게시물인지 확인해보고자 한다.

& 연산을 사용하여 둘 중 하나만 비트가 켜져 있다면 true 로 보았다.

const base = 4113; // 1111
const first = 272;  // 110
base & first; // 272 (110 이므로 base안에서 flag 값을 품고있다)



//  함수로 표현해 보면
function isFirst (flag) {
	const base = 4113; // 1111
	const value = base & flag; // 272 (16진수로는 110 이므로 base안에서 flag 값을 품고있다)
    return value === flag;
}


// 위에서 선언한 first 값를 매개변수로 넣어보자
isFirst(first); // true

 

 

비트 연산자

기호 설명 예시
& 대응 되는 비트가 1 이면 모두 1을 반환 (AND 연산)
    • AND(0, 0) = 0
    • AND(0, 1) = 0
    • AND(1, 0) = 0
    • AND(1, 1) = 1
1011
1110
-----
1010
| 대응 되는 비트 중 하나라도 1이면 1을 반환(OR 연산)
    • OR(0, 0) = 0
    • OR(0, 1) = 1
    • OR(1, 0) = 1
    • OR(1, 1) = 1
1011
1110
-----
1111
^ 대응 되는 비트가 서로 다르면 1을 반환 (XOR 연산)
  • XOR(0, 0) = 0
  • XOR(0, 1) = 1
  • XOR(1, 0) = 1
  • XOR(1, 1) = 0
1011
1110
-----
0101
~ 비트를 1이면 0으로, 0 이면 1로 변경 (NOT 연산)
  • NOR(0, 0) = 1
  • NOR(0, 1) = 0
  • NOR(1, 0) = 0
  • NOR(1, 1) = 0
1011
1110
-----
0000
<< shift 1 bit to left (left shift 연산)

int x = 5;  // 16진수는 101
int result = x << 2
result : 10100 (왼쪽으로 두칸밀림)
>> shift 1 bit to right (right shift 연산) int x = 65792 // 16진수는 10100
int result = x >> 2
result: 00101 (오른쪽으로 두칸밀림)

 

 

 

 

 

 

ref:

https://rebro.kr/63

 

 

 

 

 

반응형

댓글