만져보는 임베디드 시스템/아두이노 소프트웨어

아두이노 소프트웨어-v.연산자

hanjinee 2020. 12. 31. 00:36

제타지니 등장! 오늘은 연산자에 대해서 다루어보겠습니다.

아두이노 프로그래밍에서는 C/C++에서 사용하는 연산자들을 모두 사용할 수 있습니다.

분류는 산술 연산자, 비교 연산자, 논리 연산자, 비트 연산자, 복합 연산자 등으로 나눌 수 있습니다.

 

산술 연산자(Arithmetic Operators)

 

 

C/C++에서 정수 및 실수형 값에 표시에 대해서 위와 같은 산술 연산자를 제공합니다. 

 

'=' 는 대입입니다. 예제에서 볼 수 있듯, x = 2; 라는 코드는, x라는 변수에 2라는 값을 대입하라. 라는 의미이죠. 

밑에 부터는 y값이 8 이라고 가정하겠습니다. 

'+'  더하기 입니다. 예제 x = y + 2; 라는 의미는, x라는 변수에 y +2 라는 값을 대입하라. 이니까, y+2 = 10이므로, x = 10이 됩니다. 

'-'  빼기 입니다. 변수 x에 y-2 대입, 즉, y-2 = 6이므로, x = 6; 이 되는 거죠

'*'  곱하기 입니다. 변수 x에 y*2 대입, 즉 y*2 = 16이므로, x = 16;이 됩니다.

'/'  나누기 입니다. 변수 x에 y/2 대입, 즉, y/2 = 4이므로, x = 4;이 됩니다.

'%' 나머지입니다. 변수 x에 y/3으로 나눈 나머지를 대입, 8/3 = 2...2 이므로, 나머지 값 2를 x에 대입하게 됩니다.

 

비교 연산자(Comparison Operator)

 

두 값을 비교할 때 사용합니다. 비교 연산의 결과는 true 또는 false로 주어집니다. 이 비교 연산자는 조건문이나 반복문에서 흔히 사용되지요. 단 주의하실 점은, 두 개의 기호로 구성되는 연산자의 경우 '공백 없이' 붙여서 써야 합니다. 예를 들어 ! = 와 같이 띄어 쓰게 되면, 오류가발생합니다. 

 

 

위의 표에 다 설며오디어 있으므로, 딱히 설명드릴 게 없습니다. x값이 y값과 비교했을 시에 (meaning)하면, true 값을 반환, 그렇지 않으면 false 값을 반환합니다. 

 

 

논리 연산자(Boolean Operator)

 

논리 연산자는 불 논리(Boolean Logic)에서의 기본 연산이 AND, OR, NOT에 대응하는 연산자가 제공되는 데, 비교 연산자와 마찬가지로 결과 값이 true 또는 false로 반환됩니다. 자세한 의미는 밑에서 보시겠습니다. 

 

 

'&&' : 좌우의 값이 모두 참일 때 true 값을 반환합니다.

'||' : 좌우의 값중 어느 하나라도 참일 때 true 값을 반환합니다.

'!' : 참이면 false, 거짓이면 true 값을 반환합니다. 

 

비트연산자(Bitwise Operator)

 

모두들 아시다 시피 컴퓨터는 0과 1의 세상이지요. true와 false 값도 실상 1과 0으로 반환되지요.

실제로 비트 연산이라고 하는 놈은 생각보다 많이 사용됩니다. 이유인 즉슨, '빠르면서 정교하기' 때문입니다. 

다른 추상화된 정보와는 달리 재현의 과정을 거치지 않기 때문입니다. 그렇기 때문에, 임베디드 같은 시스템에서 많이 활용하는 편입니다. 

마이크로 프로세서는 모든 자료를 이진수 값으로 처리하며, 처리의 최소 단위는 비트입니다. 

C/C++ 언어에서 비트 값을 처리할 수 있는 비트 연산자들을 통해 비트 단위의 연산을 수행할 수 있도록 도와주는 데요, 

다만 주의할 점은 '실제 연산은 최소 8개의 비트를 묶는 바이트 단위로 이루어 진다는 점!' 입니다. 

 

 

 

가장 기초적인 비트 이동 연산자부터 보시자면,.

x<<y 는 x를 y 비트 왼쪽으로 이동, 

x>>y 는 x를 y 비트 오른쪽으로 이동. 입니다. 

 

를 들어 x라는 비트가 00010101이라고 한다면, 

x<<2는 1을 왼쪽으로 두번씩 이동시켜서

00010101 ==> 01010100 이 되겠지요?

반대로 

x>>2는 1을 오른쪽으로 두번씩 이동시키므로 

00010101 ==> 00000101 이 되겠습니다.

 

10진수로 따지면, x라는 숫자에 대해 2를 y번 곱하느냐 (x<<y), 혹은 2로 y번 나누느냐 (x>>y)가 되겠습니다. 

 

 

비트 논리 연산자

비트 논리 연산자는 밑에 나와있는 표를 이해하신다면 굉장히 쉬워집니다. 

 

a와 b를 비교한다고 가정해볼게요

a = 11001011

b = 00101001

이라고 한다면 비트 논리 연산자는 각 자리수를 비교하시면 됩니다.

and와 같은 경우에는 0끼리 만나면 모두 0이되고요, 1과 1이 만나야만 1이 되므로, 

a&b = 00001001 이고,

or과 같은 경우는 0과 0이 만나야만 0이 되고 나머지는 모두 1이 되므로,

a|b = 11101011 이 되겠습니다. 

XOR과 같은 경우 같은 수가 만나면 0이되고 나머지는 1이 되므로

a^b = 11100010 이 되겠습니다.

마지막으로, not 같은 경우, 그냥 1을 0으로, 0을 1로 바꾸면 되겠습니다.

~a = 00110100

~b = 11010110

 

 

 

 

728x90