이번 포스팅에서 공부할 내용은 연산자입니다.
연산자가 뭐 얼마나 있다고 생각하실 수도 있는데 생각보다는 꽤 많습니다... ㅋㅋㅋㅋ
그렇다면 연산자의 종류, 그리고 우선순위와 결합방향에 대해서 알아보도록 하겠습니다!!
목차
0. 연산자의 기본 개념
수학 시간에 수식이라는 것을 배운 적이 있을 것입니다.
수식은 값을 갖는 요소를 말합니다.
그리고 수식의 값을 구하는 것을 "수식을 평가"한다고 합니다.
연산식은 연산자를 이용한 수식입니다.
연산식은 연산자와 하나 이상의 피연산자로 구성됩니다.
연산자는 연산에 사용되는 기호입니다.
+, -, ++, --, ==, >, <, &&, ||, <<, >> 등이 있습니다. 처음 보는 기호들도 있지만 뒤에서 살펴보도록 하겠습니다.
피연산자는 연산의 대상이 되는 값입니다. 연산자 뒤에 나옵니다.
1. 연산자의 종류
연산자의 종류는 피연산자의 개수 / 연산자의 기능에 따라 나눌 수 있습니다.
먼저 피연산자의 개수로 나누면 단항 연산자 / 이항 연산자 / 삼항 연산자로 나눌 수 있습니다.
연산자의 기능으로 나누면 산술 / 증감 / 관계 / 논리 / 비트 / 대입 / 조건 / 기타로 나눌 수 있습니다.
이번 포스팅에서는 연산자의 기능으로 나눈 종류를 바탕으로 하나씩 살펴보도록 하겠습니다.
산술 연산자는 기본적인 사칙 연산 기능을 제공하는 연산자입니다.
크게 특이할 게 없기 때문에 간단하게 보고 넘어가면 되겠습니다.
단, %를 처음 보신 분들을 위해 간략하게 설명드리면 나머지를 구하는 연산자입니다. 정수형에서만 사용할 수 있다는 것이 특징입니다.
5가지 연산자 모두 입력한 연산자에 따라 결과값의 형태가 결정되며, 만약 형태가 다른 두 값이 들어가는 경우 더 넓은 형태가 출력됩니다. (int와 double을 연산하면 double형이 출력됩니다.)
증감 연산자는 대표적인 단항 연산자이며, 변수의 값을 1만큼 증가시키거나 감소시킵니다.
증감연산자는 반드시 변수에만 사용해야 합니다. 상수에서는 사용할 수 없습니다.
또한 실수를 담고 있는 변수에도 증감연산자를 사용할 수 있다는 것이 특징입니다.
연산자가 앞에 있으면 전위형, 뒤에 있으면 후위형입니다. 전위형은 가장 먼저 작동하고 뒤의 수식이 진행되며, 후위형은 수식이 모두 진행되고 난 후에 변수의 값을 증감시킵니다.
관계 연산자는 두 수의 값을 비교할 때 사용되는 연산자입니다.
수식의 값이 항상 참 또는 거짓입니다. 즉 bool을 출력합니다. (True / False)
관계 연산자에서 가장 주목해야 할 연산자는 ==입니다.
두 수의 값이 같은지 비교할 때는 = 연산자가 아니라 == 연산자를 사용해야 합니다.
= 연산자는 할당, == 연산자는 비교라고 생각하시면 됩니다.
아래 표는 a=10, b=20일 때의 예시입니다.
논리 연산자는 참과 거짓을 이용한 논리 연산기능을 제공합니다.
AND(&&), OR(||), NOT(!)이 있고, 논리연산자를 사용하지 않으면 잘못된 수식을 만들 수 있으므로 주의해야 합니다.
AND(&&)는 두 값이 모두 참이어야 참을 반환하고, OR(||)은 두 값 중 하나만 참이어도 참을 반환합니다.
NOT(!)은 다항연산자인 AND와 OR과는 다른 단항연산자이고, 받은 값의 부호를 반대로 바꿉니다.
아래 그림은 score=80 일 때의 예입니다.
논리 연산자를 사용하지 않으면 90 <= score가 먼저 연산되고, 그 결과값인 0이 100과 비교되어 1(True)라는 잘못된 결과값이 출력됩니다. 80이 90 이상 100 이하인 수는 아니므로 확실히 틀렸죠?! 이런 경우 반드시 나눠서 연산한 후 논리 연산자를 이용하여 묶어주어야 합니다.
추가로 조심해야 할 부분은 논리 연산자 &&(AND)와 ||(OR)는 관계 연산자보다 우선순위가 낮다는 점입니다.
또한 &&연산자는 곱연산이기 때문에 합연산자인 ||연산자보다 우선순위가 높고, !(NOT)연산자는 관계연산자보다 우선순위가 높습니다.
실제로 이렇게 복잡하게 사용할 일이 적지 않은 편이므로, 꼭 이해하고 넘어가시는 것을 추천드립니다.
비트 연산자는 비트 단위로 연산을 수행합니다.
AND(&), OR(|), XOR(^), NOT(~), 이동(<< >>)이 있습니다.
비트단위끼리 묶어서 계산하되, NOT은 단항 연산자이고, XOR은 비교하는 두 비트값이 다르면 참(1)이고 같으면 거짓(0)입니다.
비트 이동 연산자의 경우 비트를 왼쪽 혹은 오른쪽으로 밀어버립니다.
<<의 경우 왼쪽으로 밀려난 비트는 사라지고, 오른쪽 빈자리에는 0이 채워집니다. (결국 2^n을 곱하는 것과 같습니다)
>>의 경우 오른쪽으로 밀려난 비트는 사라지고, 왼쪽 빈자리에는 부호비트가 채워집니다. (음수인 경우 고려!)
(결국 2^n으로 나누는 것과 같습니다)
대입 연산자는 연산자의 좌변(변수)에 우변의 값을 저장합니다.
대입 연산자의 좌변에는 반드시 변수만 사용해야 합니다.
조건 연산자는 유일한 삼항연산자로, 앞쪽에는 조건이 오고 뒤는 참값과 거짓값이 옵니다.
조건식으로 인해 길어질 수 있는 문장의 길이를 줄이고 싶을 때 많이 씁니다.
2. 형변환과 연산자의 우선순위
산술연산자를 설명할 때 서로 다른 형태의 값을 혼합 연산하는 경우를 짧게 설명했습니다.
컴파일러는 서로 다른 형태의 값을 혼합 연산하는 경우, 혹은 변수에 다른 형태의 값을 대입할 때 자동으로 형변환을 처리합니다.
임의로 형 변환 연산자를 사용할 수도 있습니다. 변수 이름 앞에 (데이터형)을 붙이면 가능합니다.
대신 연산의 결과가 달라질 수 있기 때문에 주의해서 사용해야 합니다.
그리고 연산 전에 형 변환을 하는지, 연산 후에 형 변환을 하는 지에 따라 연산의 결과가 달라질 수도 있기 때문에 주의해야 합니다.
마지막으로 연산자의 우선순위와 연산자의 결합방향입니다.
연산자의 우선순위는 단항 > 산술 > 관계 > 논리 > 대입 > 콤마 연산자입니다.
반드시 외우고 있어야 한다는 아니고 수학시간에 배웠던 부분들만 기억해내도 대부분 맞게 사용할 수 있습니다.
만약 연산자의 우선순위와는 다른 순서로 연산을 수행하고 싶다면 괄호를 사용합니다.
그리고 연산자의 결합 방향에 따라 연산의 방향도 결정될 수 있다는 점을 꼭 생각합시다!
최대한 줄이려고 노력하였으나, 충분히 길게 느껴질 수 있다는 생각이 듭니다..
다른 파트에 비해서 연산자 부분은 달달 외우거나 하지 않아도 자연스럽게 쓰게 되는 경향이 있으니 너무 부담가지지 않고 한번 읽고 넘어가는 수준으로 편하게 생각하시면 되겠습니다 :)
그렇다면 다음 제어문 포스팅에서 뵙도록 하겠습니다!
최근댓글