Javascript/개념

[JS - 개념] 비트 연산자 ( ing~)

개발자성장기 2022. 7. 23. 18:08
반응형

 

 

우리는 자바스크립트를 쓰면서 보통은 10진수 단위로 처리를 합니다.  

그렇다면 2진수를 처리하는 연산자는 없을까? 했는데 존재했습니다.  

그것들이 무엇인지 알아보려고 합니다. 

 

연산자 효과
& AND 연산 (둘 다 1이면 1, 아니면 0)
| OR 연산 (둘 중 하나라도 1이면 1, 둘 다 0일때만 0)
^ XOR 연산 (둘 다 1이거나 0이면 0, 다르면 1)
~ NOT 연산 (비트 반전, 1은 0, 0은 1)
<< 비트를 좌측으로 시프트
>> 비트를 우측으로 시프트
>>> 비트를 우측으로 시프트하지만 좌측을 0으로 채우기

 

"   &    " ( AND 논리 연산자)

 

이것은 많이 익숙한 연산자입니다. 

보통 우리가 10진법 연산을 할때 && 이렇게하면 and로 작동이 됩니다.  

그런데 & 이렇게 하나만 사용하면 2진법 연산을 할때 사용을 하게 됩니다. 

 

 

예를들어봅시다 

 

10 & 12 

 

십진수 이진수
10 1010
12 1100
8 1000

 

& 연산자 작동 방식은 이진수에서  10에 대한 이진수 12에 대한 이진수에서 1이 중복되어질 때만 1로 처리하고 그외에는 전부 0으로 처리합니다. 

즉 두 이진수 첫 자리는 1이기에 1을 그대로 가져오고 두 번째 자리는 12만 1이기에 0, 세 번째 자리는 10만 1이기에 다시 0 , 마지막 자리는 둘다 0이기에 0을 가져와서 결국 1000이 완성되고  그걸 십진법으로 표현하면 8이되는 것 입니다. 

 

 

 

 "    |    " ( OR 논리 연산자)

 

10진법에도 AND 연산자와 OR가 존재하니  2진법에도  AND연산자 다음 OR연산자가 존재합니다. 

AND연산자가  " & " 한 개만 사용하였듯이 OR연산자도 " | " 하나만 사용합니다. 

2진법의 OR논리 연산자는 아래와 같이 동작합니다.

 

10 | 12

십진수 이진수
10 1010
12 1100
14 1110

 

OR 연산자는 AND연산자와 다르게 각각의 십진수에 대한 이진수가 1을 한 개라도 포함한다면 1을 가져오게됩니다. 

따라서   첫 자리는 10과 12의 이진수가 모두 1이기에 1을 가져오고 두 번째 자리는 12의 이진수가 1이기에 1을 가져오고

세 번째 자리는 10의 이진수가 1이기에 1을 가져오고 마지막 자리는 1을 가지고 있는 이진수가 없어서 0을 가져오게 됩니다.

따라서 1110  십진수로는 14가 됩니다. 

 

 

 

"  ^  " ( 베타 논리 연산자)

해당 연산자는 위 두 개의 연산자와 다르게 동작합니다. 

각각의 이진수 둘다 1이거나 0이면 0, 다르면 1로 동작합니다. 

예제를 보면 바로 이해가 갑니다.

 

10 ^ 12

 

십진수 이진수
10 1010
12 1100
6 0110

 

각각 이진수의 첫 자리는 보면 두 숫자모두 1로 같기에 0을 가져오고 두 번째 자리를 보면 10에 이진수는 0  12에 이진수는 1이여서 서로다르기에 1을 가져오고 세 번째자리도 서로 다르기에 1을 가져오고 마지막 자리는 0으로 서로 같기에 0을 가져옵니다. 

그래서 결국 0110으로 십진법으로 표현하면 6입니다. 

 

쉽게말해 같은 숫자면 0 다른 숫자면 1이 됩니다. 

 

 

"   ~   " (  부정 논리 연산자 )

 

 

 

 

 

 

 

https://bamtory29.tistory.com/entry/javascript-%EB%B9%84%ED%8A%B8-%EC%97%B0%EC%82%B0%EC%9E%90

https://jam-ws.tistory.com/19

https://jam-ws.tistory.com/18

반응형