연산자

두개 이상의 값들을 어떤 연산을 처리해주는 것이 연산자입니다.
연산자의 종류는 여러분들이 잘알고 있는 +, - , x, / 와 같은 것들이 있습니다.

연산자 종류

기호

의미

사용 예

a에 저장되는 값

=

오른쪽 값을 왼쪽으로 저장

a = 10;

10

+

왼쪽과 오른쪽 값을 더함

a = 10 + 10;

20

-

왼쪽 값에서 오른쪽 값을 뺌

a = 10 - 5;

5

*

왼쪽과 오른쪽 값을 곱함

a = 10 * 2;

20

/

왼쪽 값을 오른쪽 값으로 나눈 값

a = 9 / 3;

3

%

왼쪽 값을 오른쪽 값으로 나눈 나머지

a = 10 / 3;

1

>

왼쪽 값이 오른쪽 값보다 큰지 확인

a = 10 > 5;

true

>=

왼쪽 값이 오른쪽 값 이상인지 확인

a = 10 >= 20;

false

<

왼쪽 값이 오른쪽 값보다 작은지 확인

a= 10 < 5;

false

<=

왼쪽 값이 오른쪽 값 이하인지 확인

a = 10 <= 20;

true

==

왼쪽 값과 오른쪽 값이 같은지 확인

a = 10 == 10;

true

!=

왼쪽 값과 오른쪽 값이 다른지 확인

a = 10 != 10;

false

&&

양쪽 모두 참(true)이여야, 참

a = (10==10) && (20==20);

true

||

양쪽 중 하나만 참(true)이면, 참

a = (10==10) && (20==30);

true

!

true면 false로, false면 true로 연산

b = true; a = !b;

false


여러 연산자들이 있지만 주로 사용하는 것들 위주로 표를 작성했습니다.
사칙연산이나 기존 수학기호를 그대로 사용하는 것이 많기 때문에 익숙하실 겁니다.
또한 위 연산자는 숫자에만 적용되는 것이 아니라 변수에도 적용이 됩니다.

대입 관련 연산자

기호

사용 예

동일한 코드

+=

a += 10;

a = a + 10;

-=

a -= 10;

a = a - 10;

*=

a *= 10;

a = a * 10;

/=

a /= 10;

a = a / 10;

++

a++; or ++a;

a = a + 1;

a–; or –a;

a = a - 1;


대입 연산자의 경우 코드를 간소화 하기 위해 있고 대입 연산자를 사용하는 것과 동일한 코드를 풀어서 사용하는 것이 크게 상관이 없다.
다만 a++ 과 ++a 같은 경우 동일하게 1을 더하는 연산자이지만, 순서가 다릅니다.

예를 들어, 아래와 같은 코드에서 c, d가 다른 값으로 저장됩니다.
1int a = 1, b = 1, c = 0, d = 0;
2
3c = a++ * 2; // c 에 2가 저장
4d = ++b * 2; // d 에 4가 저장
++ 와 같은 연산자는 증감연산자이며, 이 연산자 근처에 다른 연산자가 있느냐 없느냐에 따라 순서가 변경됩니다. 만약 다른 연산자가 있을 경우에 ++a와 같은 경우는 먼저 a = a + 1 과정을 거치고 다른 연산자를 계산합니다.
반면 a++ 와 같은 경우 다른 연산자를 먼저 연산하고, a = a + 1의 과정을 거치는 것이 차이점이 있습니다.

그렇다면, 아래의 연산에서는 a 변수에 어떤 값들이 저장될지 생각해보세요.

Q1
int a = 1;
a = ++a + 1;
Q2
int a = 2;
a = 2 + a * a;
Q3
int b = 10;
float a = b / 3;
Q4
bool a = true;
int b = 2, c = 3;
a = b && c;
정답
A1 : a는 2 입니다.
A2 : a는 6 입니다.
A3 : a는 3.0 입니다.
A4 : a는 true 입니다.

생각한것과 다른 값이 나온것이 있나요? 아마 두 개 다른 값이 나왔을것이고 하나는 모르실 수 있을 겁니다.
보통 Q2는 연산자의 연산순서에 의한 실수가 있었을 것이라 생각합니다.
사칙연산도 덧셈, 뺄셈보다 곱셈, 나눗셈을 먼저해야 하는 것과 마찬가지입니다.
연산자 우선순위

우선순위

연산자

방향

1

() [] -> . ++ –

->

2

sizeof ++ – & ~ ! * + -

<-

3

* / %

->

4

+ -

->

5

>> <<

->

6

> >= < <=

->

7

== !=

->

8

&

->

9

^

->

10

|

->

11

&&

->

12

||

->

13

?

<-

14

= += *= /= %= &= |= <<= >>=

<-

15

,

->

위 표가 연산자 우선순위입니다. 모든 연산자들은 위와 같은 순서로 연산됩니다.
우선순위가 많더라도 겁먹지 마시고 굳이 기억하거나 외울 필요는 없습니다.
필요할 때 찾아보시면 되고, 연산이 헷갈려서, 값이 다르게 나올 것 같으면 괄호를 이용해서 순위를 먼저 지정해줍니다.
이런 순서로 되어 있구나 라고 슬쩍 보시고 넘어가시면 됩니다.

생각한 것과 다르게 나온 것이 Q3 일 겁니다.
Q3는 실수 자료형에 float 자료형에 b/3 계산 값을 초기화(처음 값 저장)하는데 당연히 3.33333… 이 아닌가? 라고 생각하셨을 수 있습니다.
하지만 ‘b/3’ 연산이 먼저 진행 됩니다. 여기 분자 b는 실수가 아니라 정수임으로 b/3 은 정수로 결과값이 나옵니다. (분자가 실수면, 분모가 정수라도 실수 값이 계산됨)
a에 3.3333.. 값이 될려면 아래와 같이 작성되어야 합니다.

1int b = 10;
2float a = b;
3a = a/3;

마지막으로 아예 감이 잡히지 않은 Q4은 bool 자료형 변수에 int 자료형 변수값을 논리연산하여 대입했습니다. 숫자를 논리연산 할 수 있는 것이 궁금한데,
아두이노에서는 숫자를 true, false로 구분 합니다. 0은 false, 0이외의 숫자는 true 입니다. 따라서 2는 true, 3도 true 임으로 true && true 는 true가 되는 것입니다.