반응형
비트 마스킹이란
비트마스킹은 비트의 특성을 이용하여 이진수로 표현하는 자료구조 기법이다.
어려워 보이지만 결국은 다 배우고 익힌 것들의 조합이다.
비트는 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 연산)
|
1011 1110 ----- 1010 |
| | 대응 되는 비트 중 하나라도 1이면 1을 반환(OR 연산)
|
1011 1110 ----- 1111 |
^ | 대응 되는 비트가 서로 다르면 1을 반환 (XOR 연산)
|
1011 1110 ----- 0101 |
~ | 비트를 1이면 0으로, 0 이면 1로 변경 (NOT 연산)
|
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:
반응형
'JavaScript' 카테고리의 다른 글
JavaScript - 실행 컨텍스트란 (2) | 2023.10.31 |
---|---|
JavaScript - Primitive Value & Casting (2) | 2023.10.31 |
JavaScript - 자바스크립트 엔진 / 이벤트 루프 / 테스크 큐 (1) | 2023.08.01 |
JavaScript - This 에 대해서 (0) | 2023.07.30 |
CSS - display 속성 inline / block / inline-block 이란 (0) | 2023.04.13 |
댓글