학습목표    1

학습주제    1

예습내용    1

실습방법    2

        2

중요함수    2

연산자(논리,증감)

학습목표

논리와 증감 연산자를 익히고 이를 활용한다.

학습주제

논리 연산자, 비트 논리 연산자, 이동 연산자. 증감 연산자, 복합 대입 연산자.

보드의 스위치를 이용하여 논리, 증감 연산자를 활용한다.

예습내용

1. 논리 연산자

논리연산자

 

 

 

&&

논리곱(AND)

a&&b

a b 같이 참일 결과가 참으로 되고 그렇지 않으면 거짓이다.

||

논리합(OR)

a||b

a b 하나만 참이면 결과는 참이다.

!

논리부정(NOT)

!a

a 참이면 거짓, a 거짓이면 참이다.

다음은 위의 논리 연산자의 경우의 수이다.

a

b

AND

OR

XOR

NOT(!a)

1

1

1

1

0

0

1

0

0

1

1

0

0

1

0

1

1

1

0

0

0

0

0

1

 

예제1

논리 연산자 AND,OR,NOT

#include "stdafx.h"

#include "iostream.h"

int main(int argc, char* argv[])

{

              int a=10,b=7;

              cout<<"AND : "<<(a&&b)<<endl;

              cout<<"OR : "<<(a||b)<<endl;

              cout<<"XOR : "<<(!a)<<endl;

              return 0;

}

AND : 1

OR : 1

XOR : 0

 

2. 비트 논리 연산자

비트연산자는 2학년의 하드웨어 제어시(ex:전등을 순차적으로 ON/OFF) 유용하게 사용하는 중요한 연산자 임으로 확실하게 이해를 해야 한다.

비트 단위로 연산을 수행하며 실수형에서는 사용을 하지 못하고 정수형 데이터에서만 사용할 있다.

논리 연산자와 비교하기 위해 부호를 1개씩 사용한다.

연산자

&

AND

a&b

|

OR

a|b

^

XOR

a^b

다음은 a,b,c 1byte(=8bit)만을 연산한 것이다.

이름

연산자

비트

 

a

10

0

0

0

0

1

0

1

0

 

b

7

0

0

0

0

0

1

1

1

AND

a&b

2

0

0

0

0

0

0

1

0

OR

a|b

15

0

0

0

0

1

1

1

1

XOR

a^b

13

0

0

0

0

1

1

0

1

 

예제2

비트 논리 연산자 AND,OR,XOR

#include "stdafx.h"

#include "iostream.h"

int main(int argc, char* argv[])

{

              int a=10,b=7;

              cout<<"비트 AND : "<<(a&b)<<endl;

              cout<<"비트 OR : "<<(a|b)<<endl;

              cout<<"비트 XOR : "<<(a^b)<<endl;

              return 0;

}

비트 AND : 2

비트 OR : 15

비트 XOR : 13

 

3. 이동 연산자

비트 이동(shift) 연산자는 비트 나열을 왼쪽(<<) 혹은 오른쪽(>>)으로 필요한 비트 수만큼 이동시키는 연산자이다.

보기

a<<2

왼쪽으로 2비트 이동

a>>3

오른쪽으로 3비트 이동

a=3 a<<2 예를 들어보자.

좌측의 2비트는 사라짐

3

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

12

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

0

 

새로운 0으로 채워짐

a=14 a>>3 예를 들어보자.

우측의 3비트는 사라짐

14

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

 

새로운 0으로 채워짐

 

예제3

비트 이동 연산자

#include "stdafx.h"

#include "iostream.h"

int main(int argc, char* argv[])

{

              int a=3;

              cout<<"결과 : "<<(a<<2)<<endl;

              a=14;

              cout<<"결과 : "<<(a>>3)<<endl;

              return 0;

}

결과 : 12

결과 : 1

 

4. 증감 연산자

값을 하나 증가 시키거나 감소 시킨다. a 예를 들어 설명하자.

++a

값을 1증가 시킨 다음 연산

--a

값을 1감소 시킨 다음 연산

a++

연산후 값을 1증가

a--

연산후 값을 1감소

 

5. 복합 대입 연산자

연산자

보기

 

+=

a+=b

a+b 연산하고 결과를 a 저장한다.

-=

a-=b

a-b 연산하고 결과를 a 저장한다.

*=

a*=b

a*b 연산하고 결과를 a 저장한다.

/=

a/=b

a/b 연산하고 결과를 a 저장한다.

%=

a%=b

a%b 연산하고 결과를 a 저장한다.

 

6. 조건 연산자

z=(a==0) ? b : c;

(a==0) 조건식이 만족하면 z=b 아니면 z=c 대입한다.

 

실습방법

   

위의 예제를 실행 한다.

 

처음

   

8 좌로 3 시프트 시킨 결과를 손으로 계산해 보고 프로그램으로 확인해서 2가지를 제출 하시오.

중요함수

 

AVR 연산자

AVR에서 비트단위의 연산을 해본다.

AVR 예제1  비트연산자

예제2 AVR에서 확인해 본다.

char a=10,b=7,c;

while (1)

      {

      // Place your code here  

        PORTC=~(a&b);    //보수를 출력         

        delay_ms(1000);  //1초간 시간 지연

        PORTC=~(a|b); 

        delay_ms(1000);

        PORTC=~(a^b); 

        delay_ms(5000); 

      };

비트 AND : 2

비트 OR : 15

비트 XOR : 13

 

AVR 예제2  이동연산자

Led 순차적으로 점등한다. 그러나 7번의 시프트가 진행되면 a=0x00 되어 Led 모두 소등된 형태로 표시 된다.

char a=1;

while (1)

      {

          a=a<<1;                // 좌로 1 이동

          PORTC=~a;          //보수를 출력        

        delay_ms(500);  //1초간 시간 지연

      };