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 |
29 | 30 | 31 |
Tags
- 오류
- Firebase
- react-hook
- 프로젝트
- 클론코딩
- vanilla js
- scflix
- Nicolas
- react
- Nomad coder
- Clone
- Hook
- Netflix
- CSS
- expo
- 코코아톡
- HTML
- github
- Vanilla
- 자바스크립트
- Nomad
- 느낀 점
- 바닐라 자바스크립트
- Project
- TiMER
- 계획
- react-native
- coding
- 마무리
- javascript
Archives
- Today
- Total
꾸매코딩
[JavaScript] 비트연산자 정리 본문
반응형
JavaScript 비트 연산자
비트 연산자(bitwise operator) 는 주어진 수를 2진수로 변환하여, 비트(bit) 단위로 논리 연산을 수행함
& (AND 논리 연산자)
비교하는 비트가 모두 1이면 1을 반환
⇒ 두 비트가 모두 1인 값을 반환
const ex1 = 2 & 3;
console.log(ex1);
// 2 0010
// 3 0011
//. 0010 = 2
| (OR 논리 연산자)
비교하는 비트 중에서 하나라도 1이면 1을 반환
⇒ 두 비트 중 하나라도 1이면 1을 반환
const ex2 = 2 | 3;
console.log(ex2);
// 2 0010
// 3 0011
//. 0011 = 3
^ (XOR 배타 논리 연산자)
비교하는 두 개의 비트가 같으면 0을, 다르면 1을 반환
⇒ 두 비트가 다를 때 1을 반환
const ex3 = 5 ^ 3;
console.log(ex3)
// 5 0101
// 3 0011
//. 1000 = 6
~ (NOT 부정 논리 연산자)
피연산자가 하나뿐이며 비트의 값들을 반전시킴
NOT 연산자기 때문에 비트단위로는 1은 0으로, 0은 1로 바꿈
⇒ 비트 NOT 연산자, 비트 뒤집기
const ex4 = ~3;
console.log(ex4)
// 0011 3
// 0100 -4
컴퓨터는 음수를 2의 보수로 표현하기 때문에 비트단위 NOT 연산자는 다음과 같은 값을 갖는 성질이 있다.
~N -> -(N+1) N은 정수
<< (Shift 왼쪽 시프트 연산자)
지정한 수만큼 비트 전체를 왼쪽으로 이동
몇 칸 이동했는지에 따라 2의 제곱만큼 수가 곱해진다
const a = 1;
console.log(a << 1); // 2
console.log(a << 2); // 4
console.log(a << 3); // 8
console.log(a << 4); // 16
>> (Shift 오른쪽 시프트 연산자)
지정한 수만큼 비트 전체를 오른쪽으로 이동
오른쪽에 있는 비트가 소멸되기 때문에 규칙성이 없음 ( 비트가 밖으로 밀려나기 전까진 2씩 나눈 값 )
const a = 16;
console.log(a >> 1); // 8
console.log(a >> 2); // 4
console.log(a >> 3); // 2
console.log(a >> 4); // 1
console.log(a >> 5); // 0
console.log(a >> 6); // 0
비트 연산자를 정리한 이유
알고리즘 문제를 풀다가 비트 연산자를 발견했다. 어디서 본 것 같은 기분만 가지고 있었는데, 학생 때 C언어를 공부하면서 배운 내용인 것 같다. 아직까진 실무에서 사용할 일은 없다고 생각하지만, 최근에 알고리즘 문제를 풀고 있으므로 쓰일 곳이 있을 것 같아서 정리하려 한다. 어려운 내용이 아니라서 한번 시간 내서 정리하면 좋을 것 같다고 생각했다.
참고자료
https://velog.io/@nulbo/TIL-JavaScript-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90
https://www.habonyphp.com/2019/03/js_28.html
반응형