본문 바로가기
프로그래밍/etc. (Language)

[JavaScript] 자바스크립트 연산자 정리(비트, 논리 연산자)

by _BlankSpace 2019. 6. 30.

프로그래밍 문법 중에서 가장 기본이 되는 부분은 당연히 연산자 사용 방법이라고 생각합니다. 그만큼, 사용하는 것에 있어서 어렵지 않지만, 잘 써야하고, 많이 쓰는 부분이기 때문입니다.

 

이번 포스팅은 저번에 이어서 비트 및 논리 연산자에 대한 정리를 하려고 합니다. 혹시나, 비교 또는 산술 연산자에 대해 궁금하신 분은 아래 글을 참고해주시면 좋을 것 같습니다.

[JavaScript] 자바스크립트 연산자 정리(비교, 산술 연산자)

[JavaScript] 자바스크립트 연산자 정리(연산자 우선순위, 대입 연산자)

 

이전에도 말했지만, 연산자 부분의 문법은 자바스크립트 뿐만 아니라, 프로그래밍 언어라면 모두 존재하고, 또한 사용하는 방법이 비슷합니다.

따라서, 한번만 이해하면, 이후부터는 어느 언어든 약간의 차이만 있을 뿐이지, 응용하는 것은 쉽게 할 수 있으리라 생각합니다.

 

아무튼, 이번 포스팅에서는 비트 및 논리 연산자에 대해서 정리를 하도록 하겠습니다.

 

 

그럼 아래 예제들로 연산자에 대한 설명을 진행하도록 하겠습니다.

 

설명을 들어가기 앞서..

아무래도, 설명은 여러 용어들로 진행을 하는데, 모르실 수 있는 용어에 대해서는 정리를 하고 진행하도록 하겠습니다.

 

- 피연산자, 연산자

피연산자와 연산자에 대해서는 많이들 들어보셨을 것이라 생각하여 간단하게 정리하겠습니다. 예를 들어서, 1 + 2 이라는 수식이 있다고 하겠습니다. 이때, 1 과 2를 피연산자로 부르고, + 를 연산자라고 할 수 있습니다.

즉, 계산을 하는 것을 연산자, 계산을 당하는 것을 피연산자라고 생각하시면 되겠습니다.

 

- 논리값

컴퓨터는 0과 1로 이루어졌다는 것을 아시죠? 이처럼, 0과 1로 논리값을 나타낼 수 있습니다. 보통 0을 false라고 부르며, 거짓이라고 합니다. 반면에, 1을 true라고 부르며, 참이라고 합니다.

 

- 단항 연산자, 이항 연산자

단항 연산자는 하나의 값에 연산자 하나로 수식을 만든 것입니다. 예를 들면 -a 라는 수식의 -가 단항 연산자라고 할 수 있습니다.

반면에 이항 연산자는 두개의 값을 하나의 연산자로 수식을 만든 것입니다. 예를 들면, a + b 와 같은 수식을 말합니다.

 

비트 연산자를 알아보자.

일단, 비트에 대해서 알아야 합니다. 비트(bit) 수식으로 3이라는 값은 11로 표현할 수 있습니다.

혹시, 이진법을 아시나요? 우리가 수를 사용할 때는 보통 십진수를 이용합니다. 즉, 9에서 1을 더하면 10이 되는 십진수를 뜻합니다.

 

하지만, 이진법은 1에서 1을 더하면 2가 되는 것이 아니라, 10이 됩니다. 즉, 0과 1로만 이루어진 숫자라고 생각하면 되겠습니다. 자세한 이진법에 내용은 추후 포스팅을 하여 정리하도록 하겠습니다.

 

& : 비트의 논리곱을 하는 연산자.

& 연산

0

1

0

0

0

1

0

1

아래와 같은 예제로 설명을 하면 다음과 같습니다.

a = 5 -> 101

b = 3 -> 011

즉, a와 b의 이진수를 한 자리씩 비트 & 연산을 합니다. &는 1과 1일 경우에만 1로 나오고, 나머지 경우에는 0이므로, 아래와 같은 예제에서는 a & b 의 결과 값이 1로 출력되는 것입니다.

// 비트 논리곱 연산자 예제.
var a = 5, b = 3;
console.log('a & b = ' + (a & b)); // a & b = 1

 

| : 비트의 논리합을 하는 연산자.

| 연산

0

1

0

0

1

1

1

1

아래와 같은 예제로 설명을 하면 다음과 같습니다.

a = 5 -> 101

b = 3 -> 011

즉, a와 b의 이진수를 한 자리씩 비트 | 연산을 합니다. &는 0과 0일 경우에만 0이 나오고, 나머지 경우에는 1이므로, 아래와 같은 예제에서는 a | b 의 결과 값이 7로 출력되는 것입니다.

// 비트 논리합 연산자 예제.
var a = 5, b = 3;
console.log('a | b = ' + (a | b)); // a | b = 7

 

 

^ : 비트의 베타적 논리합을 하는 연산자.

^ 연산

0

1

0

0

1

1

1

1

아래와 같은 예제로 설명을 하면 다음과 같습니다.

a = 5 -> 101

b = 3 -> 011

즉, a와 b의 이진수를 한 자리씩 비트 ^ 연산을 합니다. ^는 같은 0, 0 또는 1, 1 일 경우에는 0을 반환하고, 다를 경우 0, 1 또는 1, 0 과 같을 경우에는 1을 반환합니다.

아래의 경우에는 6이 나오게 됩니다.

// 비트 베타적 논리합 연산자 예제.
var a = 5, b = 3;
console.log('a ^ b = ' + (a ^ b)); // a ^ b = 6

 

~ : 비트의 부정 연산을 하는 연산자.

이 연산자는 현재 값을 이진수 비트로 변환한 뒤에, 0을 1로 변환하고, 1을 0으로 변환하는 연산자입니다.

예를 들면, 5에 ~을 붙이면, -6을 반환하고, -5에 ~을 붙이면 4를 반환합니다. 

// 비트단위 부정 연산자 예제.
console.log(~5); // -5
console.log(~-5); // 4

 

<< : 왼쪽으로 시프트(shift) 연산하는 연산자.

시프트 연산이란 왼쪽 또는 오른쪽으로 비트를 움직이는 연산을 말합니다.

예를 들어 5라는 값을 1번 왼쪽으로 시프트 연산한다면, 5는 이진법으로 101로 표현할 수 있습니다. 이 값을 3번 오른쪽 시프트 연산하면, 101000이 됩니다.

그러면, 101000은 십진법으로 40이 되겠죠. 아래 예제처럼 말이죠.

// 왼쪽 시프트 연산자 예제.
var a = 5, b = 3;
console.log('a << b = ' + (a << b)); // a << b = 40

 

>> : 오른쪽으로 시프트(shift) 연산하는 연산자.

이번엔 다른 예제로 설명하도록 하겠습니다. 10이라는 값은 이진법으로 1010 입니다. 이 값을 오른쪽으로 시프트 연산한다고 하면, 1이 나옵니다. 이때, 주의할 점은 시프트 연산을 하게 될 때, 비트의 위치가 최대값 또는 최소값의 위치 이상으로 시프트할 경우에는 자동으로 버려진다고 생각하면 되겠습니다.

즉, 1010은 오른쪽으로 3번 이동하면, 0001 값이 되겠죠. 즉, 십진수로 1이 됩니다. 아래 예제의 출력처럼 말입니다.

// 오른쪽 시프트 연산자 예제.
var a = 10, b = 3;
console.log('a >> b = ' + (a >> b)); // a >> b = 0

 

논리 연산자를 알아보자.

논리 연산자는 보통 Boolean 값을 비교할 때 사용합니다. 즉, true와 false의 값이 같은 지, 다른 지 등을 확인할 때에 사용하는 연산자를 말합니다.

따라서, 반환할 때에도 true 또는 false 값을 반환합니다.

 

&& : 논리곱 연산자

&& 연산

False

True

False

False

False

True

False

True

예를 들어, true && false 라는 수식이라고 생각해보겠습니다. 이때, 표를 참고하면 true와 false의 경우에는 false를 반환하게 됩니다.

즉, 논리곱(&&) 은 좌변과 우변이 모두 true여야 true를 반환하고, 나머지 경우에는 false를 반환합니다.

// 논리 곱(AND) 연산자 예제.
var a = true, b = false;
console.log('a && b = ' + (a && b)); // a && b = false

 

|| : 논리합 연산자

&& 연산

False

True

False

False

True

True

True

True

마찬가지로 true || false 라는 수식으로 생각하도록 하겠습니다. 이때에는 좌변과 우변이 다르지만, 표를 참고하면 true 값이 나온다는 것을 확인할 수 있습니다.

즉, 논리합(||) 은 좌변과 우변이 모두 false 경우에만 false를 반환하고, 나머지의 경우에는 true를 반환합니다.

// 논리 곱(AND) 연산자 예제.
var a = true, b = false;
console.log('a || b = ' + (a || b)); // a || b = true

 

! : 부정 연산자

이것은 피연산자를 부정하는 것으로, true 값일 경우에는 false을 반환하고, false의 경우에는 true 값을 반환합니다.

바로, 아래 예제를 보시면 이해하실 수 있으리라 생각합니다.

// 논리 부정(NOT) 연산자 예제.
var a = true, b = false;
console.log('!a = ' + !a); // !a = false
console.log('!b = ' + !b); // !a = true

 

이상으로, 비트 및 논리 연산자 정리를 마치도록 하겠습니다. 혹시나, 이해하시는 데 부족한 부분이 있거나 잘못된 내용이 있다면 댓글 남겨주세요! :)

댓글