프로그램에서 연산자는 선언된 변수를 수학적이나 논리적으로 계산하고 값을 대입하고 원하는 값을 구하기 위해서 되는 기호들을 의미합니다.
기본적으로 아두이노 프로그램에서는 C언어와 C++언어에서 사용되는 모든 연산자를 공통으로 사용할 수 있습니다.
연산자는 기능에 따라 분류가 가능하며, 이론적으로는 다음과 같이 분류를 합니다.
구분 | 연산자 |
대입 연산자 | = |
산술 연산자 | +, -, *, /, % |
관계(비교) 연산자 | >, >=, <, <=, ==, != |
논리 연산자 | &&, ||, ! |
비트 연산자 | &, |, ^, ~ |
일부 증감 연산자(++, -- 등), 시프트 연산자(<<, >>)와 같이 조금 더 다양한 연산자들이 C언어와 C++언어에 존재하지만, 사실상 아두이노를 사용하면서 위 표에 있는 대입 연산자, 산술 연산자, 관계 연산자 이 외 연산자를 사용할 기회(?)가 많지 않은 것이 사실입니다.
그래서 이번 포스팅에서는 많이 사용되고 있는 위 3개의 연산자에 대한 기능적인 설명과 간단한 예시를 통해 이해를 할 수 있도록 작성했습니다. (절대 귀찮아서가 아닙니다.)
실제로 논리 연산자, 비트 연산자를 이해하기 위해서는 논리와 비트의 개념을 선행적으로 이해되어야 하고 아두이노를 좀 더 심층적으로 사용하고 싶다고 한다면 배워보겠지만, 굳이 기초 단계에서 복잡한 개념을 선행해 공부해 심신이 지쳐 의욕을 잃어버릴 필요는 없기 때문입니다.
'아두이노에 대해 배우고 공부한다.'라고 생각할 수도 있지만, 그것보다 중요한 것은 '재미를 느끼고 아두이노를 가지고 논다.' 라는 느낌이 우선시 되어야 한다고 항상 생각하고 있습니다.
<대입 연산자>
예시> int val = 30; |
대입 연산자는 직관적으로 수학을 배운 사람이라면 저 '='(Equals) 기호가 무슨 의미인지는 다 알고 있을 것이라고 생각하고 그냥 넘어갈 수있지만, 그럼에도 불구하고 이렇게 기능으로 설명하는 이유는 수학에서 사용하는 부분과 차이가 분명히 있기 때문입니다.
기본적으로 프로그램에서 사용되는 '=' 연산자의 이름처럼 같다라는 의미보다 대입의 의미로 사용되고 있다. 기본적으로 '=' 등호를 기준으로 오른쪽의 값을 왼쪽 변수에 대입을 의미하고 있습니다.
위 예시를 설명하자면, 30 이라는 정수를 val 변수로 넣는다는 의미입니다.
글로만 설명되면 조금 헷갈릴 수도 있어 다른 예제도 살펴보겠습니다.
예시 (1) > int a = 20; int b = 30;
a = b; |
예시 (2) > int a = 20; int b = 30;
b = a; |
위 두가지 예제 코드를 간단하게 살펴보면 처음 1~2 줄에서 a는 20의 값을 가지고 b는 30의 값을 가지는 변수가 선언이 되어 있다.
예시 (1)에서는 프로그램이 실행되고 난 뒤에 b 변수의 30의 값이 20의 값을 가지는 a 변수로 대입이 되는 대입 연산자가 사용되었기이 a 변수 역시 30의 값을 가져 a, b 변수 모두가 30이 된 뒤 프로그램이 끝이 날 것입니다.
반대로 예시 (2)에서는 20의 값을 가지는 a 변수가 b 변수로 대입이 되는 모양이기 때문에 b 변수 역시 20의 값을 가지고 난 뒤 프로그램이 종료될 것입니다.
이 예제를 보듯 순서가 달라지는 경우에 결과가 달라질 수도 있고 프로그램에 큰 오류를 불러올 수 있기 때문에 잘 확인하고 사용해야 됩니다. 라고 설명드리고 싶지만 사실 프로그램을 2~3번만 연습해서 적어보신다면 이 대입 연산자를 헷갈릴 일은 크게 발생하지 않습니다.
그렇지만 오른쪽의 값이 왼쪽으로 대입이 된다! 라는 기초 개념만 정확하게 기억하고 지나가면 될 것 같습니다.
<산술 연산자>
예시> int x = 30; int y = 20; int a = 0, b = 0, c = 0, d = 0, e = 0;
a = x + y; b = x - y; c = x * y; d = x / y; e = x % y; |
산술 연산자는 대부분이 수학에서 배운거와 동일합니다. + 는 두 수를 더하는 기능, -는 등호를 기준으로 왼쪽 수에서 오른쪽 수를 빼는 기능, * 등호는 곱하기...
그래서 출력되는 값들은
+ 연산자, - 연산자, * 연산자 계산 결과> a = 50 b = -10 c = 600 |
그런데 여기서 나누기를 하는 등호와 듣도보도 못한 '%' 기호는 우리가 아는 수학적 기능과 조금은 다른 모습을 보이고 있습니다.
일반적으로 우리가 생각하기에 30 나누기 20 을 하게되면 1.5 라는 정답을 떠올리게 됩니다. 하지만 프로그램에서는 조금 다른 방법으로 계산이 되는데, 나누기한 몫의 값과 나머지의 값을 따로 구하는 등호가 있는 것입니다.
/ 연산자는 일반적으로 값을 나눈 뒤의 몫을 값을 나타내며,
% 연산자는 값을 나눈 뒤의 나머지를 출력하는 역활을 담당합니다.
/ 연산자, % 연산자 계산 결과> d = 1 e = 10 |
다음과 같이 몫과 나머지의 값을 따로 구할 수 있는 연산자들이었습니다.
<관계(비교) 연산자>
예시> int x = 15; int y = 30; int a = 0, b = 0, c = 0, d = 0;
a = x > y; b = x < y; c = x == y; d = x != y; |
관계(비교) 연산자는 두 수의 관계를 나타낸다. 여기서 조금 우선 흥미로는 부분은 '=='와 '!=' 기호입니다.
'=' 등호가 두개 들어간 것은 오타가 아니라 실제 프로그램 문법에서 사용되는 연산자입니다.
'==' 연산자는 두 수의 값이 같은가? 라는 의미를 가지며, '!=' 연산자는 반대로 두 수의 값이 같지 않냐? 라는 질문이 됩니다.
나머지 연산자의 기능은 역시나 우리가 수학에서 배운것과 동일하다. 보통 > 등호, >= 등호, < 등호 등.. 숫자의 대소. 즉, 크다 또는 크거나 같다. 와 같이 숫자의 크기를 비교하는 기능을 한다. 수학시간에 배웠듯이 만약 조건이 만족한다면 '참' 만족하지 않는다면 '거짓' 이라는 대답을 가지게 된다.
그렇다면 프로그램에서 관계 연산자 역시 우리가 배운 수학처럼 a 변수에 '거짓'이 대입되고, b 변수에 '참'이 대입되어 있을까? 라는 질문이 생깁니다.
이 질문의 답은 반은 맞고, 반은 틀리다! 인데요.
변수에 참과 거짓이란 단어가 들어가진 않지만 동일한 의미가 가진 값들이 대입되는것을 확인할 수 있습니다.
프로그램에서 참(True)의 값은 '1'로, 거짓(False)의 값은 '0' 으로 표현이 됩니다.
그래서 위 예시 프로그램의 결과 값은 다음과 같습니다.
관계 연산자 계산 결과> a = 0 b = 1 c = 0 d = 1 |
a와 c 는 거짓된 비교문이고, b와 d는 참인 비교문이기에 이런 결과값이 나오게 됩니다.
관계 연산자는 일반적인 프로그램에서 자주 사용되는 조건문 함수에 많이 사용이 되는 연산자입니다. 다음 포스팅에서 조건문 함수에 대한 자세하고 쉬운 설명을 진행할 수 있도록 준비하겠습니다.
포스팅을 마치며 다시 한 번 생각하지만, 아두이노를 어렵다. 공부해야된다. 라고 생각을 하기 보단 내가 만들고 싶은 아이디어를 위한 장난감이라고 생각하고 흥미를 가지는게 가장 중요하다고 생각합니다. 그리고 정말 귀찮아서 3개의 연산자만 설명한 게 아닙니다.(진짜 아두이노 프로그램을 작성할 때 아래 연산자들은 자주 사용안합니다.)
[아두이노 기초] 아두이노 조건문 switch-case 문 사용 (0) | 2019.10.07 |
---|---|
[아두이노 기초] 아두이노 조건문 if 사용 (0) | 2019.09.30 |
6. 아두이노 LED 밝기 제어 (2) | 2019.09.25 |
[아두이노 기초] 아두이노 프로그램 변수 개념 (0) | 2019.09.24 |
[아두이노 기초] 아두이노 개발 보드 (0) | 2019.09.22 |