[Javascript] 비트 연산자

L·2022년 9월 13일
0

Javascript

목록 보기
3/5

이번에 코딩테스트 문제를 풀어보면서 비트 연산을 이용한 문제가 있었다. 옛날에 정보처리기사에서도 자주 언급되었던 개념이었던걸로 기억하는데, 코딩테스트에서도 나올 여지가 있어서 간단하게 정리해본다.

1. &(AND)

  • &는 비트의 자리마다 대응하는 비트의 숫자가 둘다 1인 경우에 1을 반환한다.
console.log(5 & 7); 
/**
110 
111 
5와 7을 2진법으로 구현시 110과 111이 나오는데 둘다 1인 경우는 110 이므로 결과는 5가 나온다.
*/

2. | (OR)

  • |는 비트의 자리마다 대응하는 비트의 숫자가 1개라도 1인 경우에 1을 반환한다.
console.log(10 | 23); 
/**
1010 
10111 
10과 23은 비트의 자리수가 다르기 때문에 10는 왼쪽으로 부터 0으로 채워 01010으로 비교한다.
이때 자리수마다 하나라도 1이 있는경우는 11111이므로 결과는 31이 나온다.
*/

3.^(XOR)

  • ^ 는 두 연산자의 비트의 자리마다 대응하는 비트의 숫자가 둘다 같다면 0을 다르다면 1을 반환한다.
console.log(10^23);
/*
01010 
10111
10과 23은 비트의 자리수가 다르기 때문에 10는 왼쪽으로 부터 0으로 채워 01010으로 비교한다.
이때 자리수마다 둘다 다른경우는 1을 0인 경우는 0을 반환하므로  11101이므로 결과는 29가 나온다.

*/

4.왼쪽 이동 연산자(<<)

  • x<<y는 x의 2진수 값을 왼쪽으로 y번 이동 시키는 연산자이다.
console.log(10<<2);
/*10의 2비트 왼쪽으로 이동
0000 1010
0001 0100 16 + 4 = 20
0010 1000 32+8 = 40
*/

5.우측 이동 연산자(>>)

  • x>>y는 4번과 반대로 x의 2진수 값을 오른쪽으로 y번 이동시키는 연산자이다.
console.log(10>>2);
/**
0000 1010
0000 0101 4+1 = 5
0000 0010 2 = 2
*/

6.부호없는 오른쪽 이동 연산자(>>>)

  • x>>>y는 지정된 x의 양수 32 비트를 오른쪽으로 y번 이동시키고 이동시킨곳은 0으로 채우는 연산자이다. x가 양수일때는 우측 이동연산자이지만 x가 음수일때는 비트를 반전시켜 오른쪽으로 y번 이동시킨다.
console.log(100 >>> 2);
/**
00000000000000000000000001100100 100
00000000000000000000000000110010 50
00000000000000000000000000011001 25
*/
console.log(-100 >>> 2);
/**
- 00000000000000000000000001100100
->11111111111111111111111110011011로 변환(4294967196)  01111111111111111111111111001101 -> 2147483598
00111111111111111111111111100110 -> 1073741799
*/

0개의 댓글