Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- JS
- 익스프레스
- css기초
- dp알고리즘
- 몽고DB
- 리액트댓글기능
- 프로그래머스
- HTML
- CSS
- 코테
- 알고리즘
- 백준골드
- 리액트
- 백준
- HTML5
- 프로그래머스코테
- 다이나믹프로그래밍
- 코딩테스트
- 포이마웹
- 안드로이드 스튜디오
- JS프로그래머스
- 프로그래머스JS
- 리액트커뮤니티
- 자바스크립트
- 백준구현
- js코테
- 백준nodejs
- 백준알고리즘
- 백준구현문제
- 백준js
Archives
- Today
- Total
개발새발 로그
[자바스크립트] 비트 연산 Bit operation (비트 마스크) 본문
비트연산자
2진수단위로 논리 연산을 위해 사용하는 연산자입니다.
비트연산자의 종류
AND 연산자
a & b : 대응하는 비트가 모두 1일 때 1을 반환
1 & 3;
// 1 & 3 = 1
OR 연산자
a | b : 대응되는 비트 중 하나라도 1이면 1을 반환
1 | 3
// 1 | 3 = 3
XOR 연산자
a ^ b : 대응되는 비트가 서로 다르면 1을 반환한다.
1 ^ 3
// 1 ^ 3 = 2
NOT 연산자
~a : 0이면 1로, 1이면 0으로 반전시킨다.
~1
// ~1 == ...1110
LEFT SHIFT 연산
a<<b : a를 b비트만큼 왼쪽으로 이동, 이동 후 빈자리는 0으로 채운다.
1 << 3
// 1000(2)
RIGHT SHIFT 연산
a>>b : a를 b비트만큼 오른쪽으로 이동, 오른쪽으로 밀려난 만큼 범위를 벗어난 데이터는 잘려나감
9 >> 2
// 0000 0010(2)
LOGICAL RIGHT SHIFT 연산
a>>>b : 음,양을 구분하는 사인비트를 염두에 두지 않고 비트를 오른쪽으로 시프트하는 연산
비트연산자 활용(비트마스크)
GET BIT
i번째 인덱스의 비트가 1인지 0인지 판단
funtion getBit(num,i){
let answer = false;
let mask = 1 << i;
if(num & mask) answer=true;
return answer;
}
console.log(getBtit(9,3));
//1001
//1000
//----
//1000 true
SET BIT
i번쟤 인덱스를 1로 셋팅
function setBit(num,i){
//num과 mask를 or연산을 비교
return num | (1<<i)
}
console.log(setBit(5,3));
//0101
//1000
//----
//1101
CLEAR BIT
i번째 인덱스를 0으로 초기화
function clearBit(num,i){
//mask를 i번째 인덱스는 0, 나머지는 1로 세팅
//1<<i = 1000, ~(i<<i) = 0111
return num & ~(1<<i);
}
console.log(clearBit(9,3));
//1001
//0111
//----
//0001
CLEAR LEFT BIT
인덱스 기준 오른편은 1, 왼편은 0으로 초기화
function clearLeftBits(num,i){
//mask : 1000(2)-1 -> 0111
return num & (1<<i)-1
}
console.log(clearLeftBits(169,3));
//...10101001
//...00000111
//-----------
//...00000001
CLEAR RIGHT BIT
i번째 인덱스 포함 오른편만 0으로 초기화
function clearRightBIts(num,i){
//mask -1<<(i+1) : ...11110000
return num & (-1<<(i+1));
}
console.log(clearrightBits(169,3));
//...10101001
//...11110000
//-----------
//...10100000
UPDATE BIT
i번째 인덱스의 값을 1 or 0으로 업데이트
function updateBit(num,i,bool){
return (num& ~(-1<<i)) | ((bool? 1 : 0) << i);
}
console.log(updateBit(169,3,false))
//...10101001
//...11110111
//-----------&
//...10100001
//...00000000
//-----------|
//...10100001
출처
https://www.youtube.com/watch?v=yHBYeguDR0A&t=1133s
728x90
반응형
LIST
'알고리즘' 카테고리의 다른 글
[JS] 전력망을 둘로 나누기 (0) | 2023.06.10 |
---|---|
[JS] 프로그래머스 수식 최대화 (1) | 2023.06.09 |
Dynamic Programming(냅색 알고리즘-2) (0) | 2023.06.07 |
Dynamic Programming(냅색 알고리즘-1) (0) | 2023.06.07 |
Dynamic Programming -(최대 부분 증가 수열[LIS]) (0) | 2023.06.07 |