코딩/Javascript

비트연산자에 대해 알아보자!

우당당쿵당콩탕 2023. 3. 9. 14:53
728x90
반응형

비트 연산자(bitwise operator)

비트 연산자는 비트(bit) 단위로 논리 연산을 할 때 사용하는 연산자입니다.

비트란?

비트를 설명하려면 이진수를 먼저 알아야하는데요. 이진수는 0과 1로 이루어져 있는 것을 말하며 이 이진수에서 한 자리를 나타내는 것을 비트(bit)라고 합니다.

 

비트 연산자 설명
& 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산)
| 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산)
^ 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산)
~ 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산)
<< 지정한 수만큼 비트들을 전부 왼쪽으로 이동시킴. (left shift 연산)
>> 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산)

설명을 이렇게 들으면 잘 모르시겠죠.

가장 먼저 알아야할 것은 10진수를 2진수로 만드는 법부터 아셔야합니다.

10진수를 2진수로 만드는 방법

  • 2로 나누기: 10진수를 2로 나눕니다.
  • 몫과 나머지 구하기: 나눈 결과에서 몫과 나머지를 구합니다.
  • 나머지를 기록하기: 나머지를 오른쪽부터 왼쪽으로 차례대로 기록합니다.
  • 몫이 0이 될 때까지 반복: 몫이 0이 될 때까지 위의 과정을 반복합니다.
  • 결과값 뒤집기: 기록된 나머지를 역순으로 배열하여 2진수를 완성합니다.

13이라는 숫자로 예를 들어보겠습니다.

  • 13 ÷ 2 = 6 ... 1   - 나머지가 1
  • 6 ÷ 2 = 3 ... 0 - 나머지 없음
  • 3 ÷ 2 = 1 ... 1 - 나머지 1
  • 1 ÷ 2 = 0 ... 1 - 나머지 1

이렇게 나온 1011이라는 결과를 역순으로 배열하면 끝입니다. 13의 이진수는 : 1101

 

10진수를 2진수로 만드는데에 성공했으니 이제 비트 연산자에 연관지어 보겠습니다.

 

📝 & :  비트 AND 연산

대응되는  두 비트가 모두 1이면 1을 반환하며, 다른 경우는 모두 0을 반환합니다.

먼저 해야할 것은 10진수를 2진수로 바꾸는 것입니다. 15와 21로 예를 들겠습니다.

10진수 : 2진수
15 : 00001111
21 : 00010101

이진법의 한 숫자씩 비교해서 두 수가(= 두 비트) 모두 1일 때만 1을 반환하고 다른 경우는 모두 0을 반환하는 겁니다.

15 0 0 0 0 1 1 1 1
21 0 0 0 1 0 1 0 1
출력 0 0 0 0 0 1 0 1

첫번 째부터 다섯 번째자리 까지 둘 다 1인 것이 없으니 0이고 둘 다 1인 자리는 1을 반환합니다.

그러므로 결과값은 00000101 입니다.

 

📝 | : 비트 OR 연산

역시 마찬가지로 진행해 주시면 됩니다.

이 비트는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환합니다.

15 0 0 0 0 1 1 1 1
21 0 0 0 1 0 1 0 1
출력 0 0 0 1 1 1 1 1

📝 ^ : 비트 XOR 연산

비트 XOR 연산자는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환합니다.

15 0 0 0 0 1 1 1 1
21 0 0 0 1 0 1 0 1
출력 0 0 0 1 1 0 1 0

📝 ~ : 비트 NOT 연산

 비트 NOT 연산자는 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환합니다.

15 0 0 0 0 1 1 1 1
출력 1 1 1 1 0 0 0 0

📝 <<, >> : 시프트 연산자

시프트 연산자는 2진수, 비트를 이동시키는 연산자로 생각해 주시면 좋습니다.

여기 10진수를 2진수로 변환한 것입니다. 여기서 시프트 연산을 쓴다면 10 << 2 이렇게 사용 할 수 있습니다.

0 0 0 0 1 0 1 0

10 <<2 에 대한 의미는 쉽게 생각하면 2칸을 이동하라는 뜻입니다. 즉, 

 

' 10을 2진수로 변환한 비트 값을 왼쪽으로 2칸씩 이동하세요 ' 라는 뜻이 됩니다.

0 0 1 0 1 0 0 0