RedCrow + GreenBean

Feed Rss

아두이노 스케치 언어 – 연산자

05.18.2012, arduino, by .

Arithmetic Operators
일반적인 연산자를 나타낸다.
일반 수학의 수식을 그대로 사용한것도 있지만 컴퓨터상의 쉬운 표기로 인해 조금 다른 모양도 있다.
그리고 그 기능이 다른 녀석도 있다.

= (assignment operator)
같다라는 의미가 아니다.
=기호를 기준으로 좌우로 나누고 왼쪽에는 하나의 변수만 오른쪽에는 하나 혹은 다수의 변수 혹은 수식 등이 있을 수 있다.
오른쪽에 있는 변수 혹은 수식의 결과를 왼쪽에 있는 변수에 넣으라는 얘기다.

위과 같은 코드가 있을때…
첫번째 a는 1이라고 했다.
물론 이때는 b가 뭔지도 모른다.
아직 아무런 내용이 나오질 않았음으로…
두번째 b는 2라고 했다.
이제서야 b는 2임을 알 수 있고, 물론 이때 a의 값은 1이다.
세번째 a는 b라고 했다.
이는 a에 b가 가지고 있는 값을 넣으란 말이다.
b가 가지고 있는 값은 2임으로 a에 2라는 값을 넣는다.
이 시점에 a는 2라는 값을 b도 2라는 값을 가지고 있다.
네번째 b는 3이라고 했다.
이 시점에서는 a는 세번째에서 2라는 값을 가진 이후 그대로 이지만 b는 3이라는 값으로 변했다.
위 예제는 a=b는 a와 b가 같다라는 의미보다는 b의 값을 a에 넣으라는 의미를 말해준다.

+ (addition)
+기호를 포함해서 +,-,*,/ 는 아주 쉬울것이다.
수학도 아닌 산수이다.
두 값을 서로 더하거나, 빼거나, 곱하거나, 나누거나…
우리가 알고 있는 산수의 원리와 조건이 같다.
컴퓨터라는 특성으로 인해 약간 다른 점은 overflow라는것이 있다.
이는 다음에 기회가 되면 다루기로 하자.

– (subtraction)

* (multiplication)

/ (division)

% (modulo)
이건 산수에는 없는 것이다.
수학에선 배웠는지 모르겠다.
쉽게 설명하자면 나누고 남은 나머지를 뜻한다.
나누기를 했을때 몫의 정수 부분을 제외한 나머지의 값을 구하는 것이다.
3 / 2 = 1.5 이지만
몫을 정수까지만 구한다면 1이다.
그러면 나머지는 얼마인가?
0.5 ? ^^; 0.5는 몫의 정수가 아닌 부분이다.
나머지는 1이 된다.
이해가 잘 가지 않는가?
5 / 3 = 1.6666… 이다.
몫의 정수 부분은 1이다.
몫의 정수 부분은 1임으로 1 * 3 = 3 이다.
그러면 원래 수 5에서 이 몫의 값인 3을 빼면 2가 남는다.
그러면 % 연산자의 결과값은 2가 된다.
5 % 3 = 2
그럼 이 연산자는 어떨때 쓰느냐?
쓸모가 없어 보이기도 하는데…
특정수 A가 특정수 B의 배수인지 혹은 배수가 될려면 얼마가 더 필요한지 알 수 있다.
특정수 n이 2로 나누어 떨어지는지(2의 배수인지) 알 수 있다.
n % 2 라고 해서 결과값이 0이면 2의 배수이다.
결과값이 0이 아닌 1이면 2의 배수가 아니다.
n % 2의 경우는 결과가 0 아니면 1밖에 없다.
이러한 형태를 잘 이용하면 프로그램을 짜는데 매우 유용할것이다.

Comparison Operators
비교 연산자이다.
두 값을 비교할때 사용된다.
결과는 참(true, 1), 거짓(false, 0)으로 나타난다.
비교 연산자는 연산자의 좌우의 값을 비교한다.

== (equal to)
좌우의 값이 같은지를 비교한다.
만약 같다면 true(참, 1)을 같지 않다면 false(거짓, 0)의 값을 가진다.

!= (not equal to)
==와 반대의 경우다.
좌우의 값이 다른지 비교한다. 정확한 표현은 같지 않다.
만약 같지 않다면 true(참, 1)을 같다면 false(거짓, 0)의 값을 가진다.

< (less than)
왼쪽의 값보다 오른쪽의 값이 크다를 뜻한다.
오른쪽의 값이 크다면 참, 오른쪽의 값이 왼쪽보다 작거나 같으면 거짓의 값을 가진다

> (greater than)
오른쪽의 값보다 왼쪽의 값이 크다를 뜻한다.
왼쪽의 값이 크다면 참, 왼쪽의 값이 오른쪽보다 작거나 같으면 거짓의 값을 가진다

<= (less than or equal to)
<에서 같다라는 조건이 하나 더 붙는다.
왼쪽의 값보다 오른쪽의 값이 크거나 같음을 뜻한다.
오른쪽의 값이 크거나 같다면 참, 오른쪽의 값이 왼쪽보다 작으면 거짓의 값을 가진다

>= (greater than or equal to)
오른쪽의 값보다 왼쪽의 값이 크거나 같음을 뜻한다.
왼쪽의 값이 크거나 같다면 참, 왼쪽의 값이 오른쪽보다 작으면 거짓의 값을 가진다

Boolean Operators
논리 연산자

&& (and)
좌우의 값이 모두 참일때 결과가 참이다.
둘중 하나라도 거짓이 있다면 무조건 거짓이 된다.
거짓 && 거짓 -> 거짓
거짓 && 참    -> 거짓
참    && 거짓 -> 거짓
참    && 참    -> 참

|| (or)
좌우의 값중 어느 하나라도 참이 있다면 결과는 참이다.
거짓 && 거짓 -> 거짓
거짓 && 참    -> 참
참 && 거짓    -> 참
참 && 참       -> 참

! (not)
참이면 거짓을 거짓이면 참의 결과를 낸다.
!거짓 -> 참
!참    -> 거짓

Bitwise Operators
비트 연산자
컴퓨터는 사실상 0과 1의 세상이다.
참(1, true)이냐 거짓(0, false)이냐…
1은 전기가 흐르는거고, 0은 전기가 없는 것이다.
불이 들어 왔고 안왔고…
집에 있는 전등불이 0과 1의 기본적인 2진수 이다.
이러한 2진수들이 모여서 우리가 보고 있는 컴퓨터를 구성한다.
어마어마한 0과 1의 모임이다.
예를 들어 우리가 보고 있는 모니터에서 최소 단위인 1px의 경우 R(red), G(green), B(blue) 세개의 색이 모여서 1px을 이룬다.
이 세개의 색은 각각 256단계를 가진다.
256단계는 2진수 8bit 이다.
0000 0000 ~ 1111 1111 까지의 2진수로 이루어 진다.
이 세개의 색상이 각각 256단계를 가지면서 서로 각각의 다른 값으로 경우의 수가 256 * 256 * 256 가지수가 된다.
16만 컬러라는 말이 이렇게 생긴것이다.
이렇게 1px 하나가 저렇게 많은 2진수 0과 1을 가지는데…
1024 * 768이란 말은 가로 1024px, 세로 768px을 뜻하며 그 안에 들어 있는 px의 수는 786,432개의 px을 가진다.
모니터에 표현을 위해서 이만큼의 2진수를 사용하는데 컴퓨터가 데이터를 입력받고 처리해서 내용의 결과를 보여주기까지 매우 많은 0과 1이 사용된다.
그렇기에 이 2진수는 매우 중요하고 꼭 알아둬야 한다.
이러한 bit 연산자는 특정한 신호를 걸러내거나 찾아낼때 아주 유용하게 사용될 수 있다.

& (bitwise and)
bit단위로 AND 연산을 한다.
예제에 사용되는 수는 2진수로 편의상 2진수란 표시는 하지 않겠다. (실제 프로그램에서는 2진수 라는 것을 알려줘야 한다.)

&는 bit단위로 AND연산을 하게 된다.
자릿수를 맞추어 해당 자리수 하나하나를 AND연산을 하게 된다.
편의상 왼쪽자리부터 진행을 하자.
왼쪽에서 첫번째부터 네번째까지는 a가 0, b도 0이다.
AND연산은 둘다 1이여야 결과가 1임으로 결과 c역시 모두 0이 된다.
a의 다섯번째는 1, b의 다섯번째도 1 임으로 결과 c는 1이 된다.
a의 여섯번째는 1, b의 여섯번째는 0 임으로 결과 c는 0이 된다.
a의 일곱번째는 0, b의 일곱번째는 0 임으로 결과 c는 0이 된다.
a의 여덟번째는 1, b의 여덟번째도 1 임으로 결과 c는 1이 된다.
그러므로 c는 00001001 이 된다.

| (bitwise or)
&와 마찬가지로 진행이 되지만 AND연산이 아닌 OR연산이 된다.

왼쪽에서 첫번째부터 네번째까지는 a,b 모두 0임으로 결과 c도 모두 0이 된다.
a의 다섯번째는 1, b의 다섯번째도 1 임으로 결과 c는 1이 된다.
a의 여섯번째는 1, b의 여섯번째는 0 임으로 결과 c는 1이 된다.
a의 일곱번째는 0, b의 일곱번째는 0 임으로 결과 c는 0이 된다.
a의 여덟번째는 1, b의 여덟번째도 1 임으로 결과 c는 1이 된다.
그러므로 c는 00001101 이 된다.

^ (bitwise xor)
특이한 연산자가 등장하였다.
and 와 or 연산자를 조합하면 이 연산자의 결과와 같은 결과를 만들어 낼 수 있지만, 아무래도 많이 쓰는 편이라서 아예 연산자화 했다.
특이하고 처음 보지만 어렵게 생각할 필요가 없다.
두 값이 서로 같으면 거짓, 두 값이 서로 다르면 참이 된다.
거짓 && 거짓 -> 거짓
거짓 && 참 -> 참
참 && 거짓 -> 참
참 && 참 -> 거짓
쉽게 생각하면 두 값이 서로 다른지 비교하는것이다.

왼쪽에서 첫번째부터 네번째까지는 a,b 모두 0임으로 결과 c도 모두 0이 된다.
a의 다섯번째는 1, b의 다섯번째도 1 임으로 결과 c는 0이 된다.
a의 여섯번째는 1, b의 여섯번째는 0 임으로 결과 c는 1이 된다.
a의 일곱번째는 0, b의 일곱번째는 0 임으로 결과 c는 0이 된다.
a의 여덟번째는 1, b의 여덟번째도 1 임으로 결과 c는 0이 된다.
그러므로 c는 00000100 이 된다.
이 연산자 역시 필터링등에 사용된다.

~ (bitwise not)
상태를 바꾸는 연산자이다.
참은 거짓으로, 거짓은 참으로…

상태를 바꾸는 연산자임으로 반대로 취하면 된다.
b는 11110010이 된다.
2의 보수를 구할때 사용된다.
2의 보수는 컴퓨터 내에서 음수 계산을 위한 방식으로 자세한건 기회가 되면 다뤄보도록 하겠다.

<< (bitshift left)
각 자리를 원하는 수만큼 이동을 한다.
left는 왼쪽으로 right는 오른쪽으로…
생각외로 많이 사용되어 지는 연산자이다.

b는 a를 왼쪽으로 3bit씩 이동을 해라는 뜻이다.
a를 왼쪽으로 3bit씩 이동을 하면
b는 01101xxx 이 된다.
여기서 xxx는 왼쪽으로 3bit씩 이동을 하면서 데이터가 없이 새롭게 생겨난 자리이다.
새롭게 생겨난 자리는 무조건 0을 채운다.
그러므로 b는 01101000 이 된다.

>> (bitshift right)
<< 와 마찬가지지만 그 이동방향이 반대인 오른쪽이다.

b는 a를 오른쪽으로 3bit씩 이동을 해라는 뜻이다.
그리고 새롭게 생겨난 자리는 0을 채우면 된다.
b는 00000001 이 된다.

Compound Operators
단축 연산자라 보면 더욱 쉽다.

++ (increment)
해당 값을 1증가 해라는 뜻이다.
변수가 어디에 있느냐에 따라서 미치는 영향이 다르다.
기본적으로

이라고 하면 x의 값을 1증가 해라는 뜻으로

과 같다.
헌데 다른 변수에 값을 대입할때 연산자의 위치가 어디에 있느냐에 따라서 결과가 달리 나타난다.

첫번째 줄에서 a에 2를 입력하였다.
그리고 두번째, 세번째 줄에서 증가 연산자를 사용했다.
하지만, 그 결과는 조금 다르다.
증가 연산자가 앞에 있다면 증가연산을 먼저 한다.
두번째 줄에서 a를 1증가시킨 후 그 결과인 3을 b에 입력한다.
그러므로 두번째줄을 마친 후 a와 b의 값은 a는 3, b도 3이 된다.
세번째 줄에서는 a의 값을 먼저 b에 넣는다. 그리고 a의 값을 1증가한다.
그러므로 세번째줄을 마친 후 a와 b의 값은 a는 4, b는 3이 된다.
연산자의 위치에 따라 먼저 연산하고 대입하는지, 대입하고 연산하는지가 달라진다.

— (decrement)
증가 연산자와는 반대로 감소 연산자이다.
1씩 감소를 한다.
이외에는 증가 연산자와 동일하다.

+= (compound addition)
앞서 말한것처럼 단축 연산자라는 뜻이 여기서 보여진다.
+=는 연산자 왼쪽에 나오는 변수가 계속해서 반복이 되다보니 생략한 형태이다.

는 다음을 단축 시켜 놓은것과 같다.

왼쪽의 결과를 저장하는 변수에 다른 값을 +,-,*,/,&,|를 하기에 반복적으로 나오는 변수명을 생략한 형태가 되겠다.

-= (compound subtraction)

*= (compound multiplication)

/= (compound division)

&= (compound bitwise and)

|= (compound bitwise or)





2 Responses to 아두이노 스케치 언어 – 연산자

  1. 유용한 정보 감사합니다. 한가지 임으로라는 말은 없습니다 이므로가 맞습니다.

    응답
  2. I have noticed you don’t monetize your page, don’t waste your
    traffic, you can earn extra bucks every month. You can use the best adsense alternative for any
    type of website (they approve all websites), for more info simply search in gooogle: boorfe’s tips monetize your website

    응답

답글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.