17
Chapter 05 기본 연산자 기본 연산자 1 2009 한국항공대학교 항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) Perfect C 연산자와 피연산자 연산자와 피연산자 연산자 연산자(operator)는 산술연산자 +, -, * 기호와 같이, 이미 정의된 연산을 수행하는 기호나 키워드를 의미 피연산자 피연산자 연산(operation)에 참여하는 변수나 값을 피연산자(operand) 표현식의 평가 2

Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Chapter 05

기본 연산자기본 연산자

1

2009 한국항공대학교항공우주기계공학부(http://mercury.kau.ac.kr/sjkwon)

Perfect C

연산자와 피연산자연산자와 피연산자

연산자

연산자(operator)는산술연산자 +, -, * 기호와같이, 이미정의된연산을수행하는기호나키워드를의미

피연산자피연산자

연산(operation)에참여하는변수나값을피연산자(operand)

표현식의 평가

2

Page 2: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

연산자 분류연산자 분류

연산자 종류

항 수에 따른 분류

3

Perfect C

대입 연산자대입 연산자=변수의저장값을대입하는 = 기호가대입(할당) 연산자(assignment operator)

대입연산자는연산자의가장기본이되는연산자이며, 그기능을가장늦게수행

대입연산자의왼쪽부분에는반드시변수만이가능

수식은문장이기는하지만값을대입하지않으면프로그램에는영향이수식은문장이기는하지만값을대입하지않으면프로그램에는영향이없음

4

Page 3: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

예제 5-2 소스예제 5 2 소스

arithmetic.c

5

Perfect C

관계 연산자관계 연산자관계 연산자는 2개의 피연산자크기를비교하기위한연산자두항의값을비교하는데사용• 두항의값을비교하는데사용

두개의문자로구성되는관계연산자기호사이에는공백문자가없이연결되어야하며, 두개의문자순서도주의해야함.

관계연산자가포함된수식의결과는 1(참을의미)이아니면 0(거짓을의미)

6

Page 4: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

예제 5-4 소스예제 5 4 소스

relationop.c

7

Perfect C

증감 연산증감 연산증감 연산자 기호 ++, --를 이용피연산자는연산자의앞이나뒤에위치피연산자는연산자의앞이나뒤에위치증감연산자는평가에의한결과값만있는것이아니라연산에참여하는피연산자의값자체가 1 증가하거나 1 감소하게함피연산자를 1만큼줄이거나늘리는데에사용

a++, ++a증가연산자 ++a와 a++는 모두 a=a+1의 효과(변수 값 1증가)

a--, --aa , a감소연산자 --a와 a--는 모두 a=a-1의 효과(변수 값 1감소)

8

Page 5: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

전위와 후위전위와 후위

연산자 위치에 따른 차이연산자의 위치에 따라 평가 결과는 다름

전위 방식 (prefix) : 증감연산자의 위치가 피연산자보다 앞에위치하는 형태의 표현 ++ 위치하는 형태의 표현 ++a, --a ☞ 평가값(연산의 결과값)과 연산 후 변수의 값이 같다. 후위 방식(postfix) : 마찬가지로 증감연산자의 위치가후위 방식(postfix) : 마찬가지로 증감연산자의 위치가피연산자보다 뒤에 위치하는 형태의 표현 a++, a--

9증감연산자를이런방식으로무리하게사용하지말것!

Perfect C

장점과 주의점장점과 주의점

증감연산 사용 이유증감연산자를이용하면프로그램형태가간결

기계어코드와일대일대응되므로실행속도가개선

주의점주의점연산자의위치에따라평가값다르므로주의요구

++ 자체가연산자기호이므로중간에공백이들어가면안됨++, --자체가연산자기호이므로중간에공백이들어가면안됨

산술연산이나관계, 논리연산보다증감연산자의연산이우선

증감연산자는피연산자로변수를사용할수있으나, 상수나일반,수식을피연산자로사용불가능

• 잘못된예

int a = 10;++300; /* 상수에는 증가 연산자를 사용할 수 없다 */ (a+1)--; /* 일반 수식에는 증가 연산자를 사용할 수 없다 */

10

Page 6: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

논리 연산자논리 연산자&&(and), ||(or), !(not)논리연산자는두개또는하나의논리값을 0이나 1의논리값으로평가하기위한논리연산자는두개또는하나의논리값을 0이나 1의논리값으로평가하기위한연산자

C 언어는참과거짓이라는상수는없으며, 단순히 0을거짓으로, 0이아닌값을참으로간주

정수만을이용하는것은아니고실수나다른유형의자료값도이용이가능

다만평가의결과는반드시 0이거나 1

11

예 ( 5 > 2 && 3 == 2 )

Perfect C

논리 연산 이용논리 연산 이용논리연산자는수식에포함된그들의피연산자의 0이아닌값(참을의미)과 0인값(거짓)에따라 1이나 0으로평가결과가도출의미)과 0인값(거짓)에따라 1이나 0으로평가결과가도출

이런방식으로논리연산을할경우는거의없음!

12

Page 7: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

예제 5-7 소스예제 5 7 소스logic.c위에서 살펴 본 논리연산자의 예제를 프로그래밍하여 결과를 비교

논리연산자의 평가 값은 0과 1, 두 값 중의 하나

13

Perfect C

프로그램 연습 (예제 5-9)프로그램 연습 (예제 5 9)프로그램 목적연산자의이용

14

Page 8: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Chapter 06

비트와 여러 연산자

15

2009 한국항공대학교항공우주기계공학부(http://mercury.kau.ac.kr/sjkwon)

Perfect C

조건 연산자조건 연산자조건 삼항 연산자

조건 연산자는 C 언어에서 유일하게 세 개의 피연산자를 갖음조건 연산자는 C 언어에서 유일하게 세 개의 피연산자를 갖음연산식 exp1이 0이아닌값(참을의미)으로평가되면, 삼항연산자의평가값은두번째연산식인 exp2의값으로평가

연산식 exp1이 0(거짓을의미)으로평가되면삼항연산자의평가값은세번째연산식인 exp3의값으로평가

16

Page 9: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

조건 연산자의 연산조건 연산자의 연산위연산식을다음과같이대입연산자와함께이용하면이연산식은변수courses의값이 1일경우 answer의값에 A를할당하고 1이아닌courses의값이 1일경우, answer의값에 A를할당하고, 1이아닌경우는 B를할당

answer = (courses == 1) ? ‘A’ : ‘B’

대입연산자의우선순위는가장낮기때문에우선순위가그보다높은조건연산자를먼저계산하여그결과를변수 answer에저장하는

( )

역할을수행

조건연산식의예

17

Perfect C

비트 논리 연산자비트 논리 연산자비트논리연산자는피연산자정수값을비트단위로논리연산을수행하는연산자연산자

비트논리연산자는 &, |, ^, ~ 네가지

피연산자의결과는다음과같은 0이나 1의비트값의결과를구성피연산자의결과는다음과같은 0이나 1의비트값의결과를구성

18

Page 10: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

논리곱(&)논리곱(&)비트 연산비트연산자는 0과 1만으로구성된이진수각자리에대해연산을하며, 그결과도 0 또는 1예를들어비트논리곱연산자인 &는두수의자릿수가모두 1일때만 1이고, 그이외에는 0이되는연산을수행

연산 3 & 5피연산자인 3과 5를각각이진수로표현한각각의비트를 and피연산자인 3과 5를각각이진수로표현한각각의비트를 and 연산으로수행한결과의정수값이평가값, 즉 1

연산 7 & 5 결과 ?

19

Perfect C

예제 6-2 소스예제 6 2 소스

bitlogic.c사용자 입력 정수x와 y를표준입력으로 두표준입력으로 두개의 변수에 저장

두 개의 변수에대하여 AND OR 대하여 AND, OR, XOR, NOT 비트연산을 수행한결과를 다음 그림과같이 출력하는프로그램을 작성

20

Page 11: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

이동 연산자이동 연산자

Shift 이동연산자는비트단위로왼쪽이나오른쪽으로이동시키는연산자

C언어에서는다음두가지의이동(shift)연산자를제공C 언어에서는다음두가지의이동(shift) 연산자를제공

간편 계산오른쪽이동연산자는첫번째피연산자가양수인경우비트이동을한번할때마다첫번째피연산자를 2로나누는효과한번할때마다첫번째피연산자를 2로나누는효과

• a >> b 의결과는 a / 2b의몫 (a가양수인경우)

왼쪽이동연산자는비트이동을한번할때마다첫번째

21

피연산자를 2로곱하는효과• a << b 의결과는 a * 2b

Perfect C

Shift left <<Shift left <<7 << 2위연산은좌변의피연산자인 7의이진수표기값을, 우변에지정한우변에지정한숫자만큼왼쪽으로옮기라는연산을옮기라는연산을의미

22

Page 12: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

Shift right >>Shift right >>7 >> 2위연산은좌변의위연산은좌변의피연산자인 7의2진수표기값을, 우변에지정한우변에지정한숫자만큼오른쪽으로옮기라는연산을의미의미

부호비트의 처리

오른쪽이동연산자 는비트연산자 >>는비트이동으로비게되는왼쪽비트들을원래의비 들을원래의첫번째피연산자의최상위부호비트로채움

23

비트로채움.

Perfect C

예제 6-3 소스예제 6 3 소스

shift.c

24

Page 13: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

sizeof 연산자sizeof 연산자

연산자 sizeof 변수나 자료형의 크기!변수나변수형또는배열의저장장소의크기(바이트단위)를구하는연산자

이연산자는기호를사용하지않고키워드 sizeof를사용이연산자는기호를사용하지않고키워드 sizeof를사용

sizeof (자료형)sizeof 변수명

연산자 sizeof는위와같이키워드뒤에자료형이나변수명을이용하여사용하는데, int와같은자료형을기술하는경우반드시괄호를이용

int myAge = 10;printf(“%d\n”, sizeof myAge);printf(“%d\n” sizeof (short));

연산자 sizeof의값은실행환경에따라달라질수있음

printf(“%d\n”, sizeof (short));

25

Perfect C

형 변환형 변환통일된 자료형으로 연산일반적으로 C 언어의연산식에서여러피연산자의자료형이서로다른경우, 하나의통일된자료형으로자동변환하여연산을수행

표현의크기가작은 int 형 3을 4.0과같은 double 형으로변환하여계산, 3.0 + 4.0을연산하여결과는 7.0계산, 3.0 4.0을연산하여결과는 7.0

형 넓히기(promotion)형넓히기는크기가작은형을크기가큰형으로변환하는것을말하며컴파일러에의해자동으로실행될수있음

26

말하며컴파일러에의해자동으로실행될수있음

Page 14: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

형 변환 연산자형 변환 연산자

형 좁히기내림변환은일반적으로형변환연산자를이용하여수행

그러나다음과같은대입문에서는컴파일러가자동으로내림변환을수행하여변수 a에는정수값인 11만이저장변환을수행하여변수 a에는정수값인 11만이저장

• 대부분의컴파일러는이러한내림변환의경우, 정보의손실이예상되므로컴파일중경고를발생

그러므로가능하면내림변환에는형변환연산자이용을권고

int a = 11.4;

러 가능하면내림변환에는형변환연산자이용을권

형 변환(cast) 연산자피연산자의값을앞위치의괄호안에서지정한자료형으로변환하는연산

(자료형) 피연산자(int) 30 5

27

(int) 30.5

Perfect C

변환 연산의 이용변환 연산의 이용

다음 소스에서 변수 Result의 값은1.5

int x;int y;double Result;double Result;x = 6;y = 4;

마지막 연산식이 다음이면 결과는 1.5

Result = (double)x / (double)y;

마지막 연산식이 다음이면 결과는 1.5

Result = (double)x / y;

마지막 식이 다 이 과

마지막 연산식이 다음이면 결과는 1.0

Result = x / (double)y;

28

마지막 연산식이 다음이면 결과는 1.0Result = x / y;

Page 15: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

예제 6-6 소스예제 6 6 소스

Cast.c자료형 double 형 변수 x, y에각각 2.4와각각 2.4와3.9를 저장한후 여러 더하기연산 후 결과연산 후, 결과값을 출력

29

Perfect C

축약 대입 연산자축약 대입 연산자

+= 등 10가지대입연산자인 =와산술연산자인 +를합쳐놓은듯한연산자 +=을축약대입연산자

왼쪽피연산자부분에는반드시변수만이올수있음

축약대입연산자 x += y의연산방법은변수 x y이전값에다오른쪽의연산식 y에의하여평가된결과값을연산(더하기)하여, 새롭게수정된값이변수 x에대입

30

Page 16: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

우선 순위대입 < 조건 < 논리 < 비트 < 관계 < 이동 < 산술 < 단항<괄호!

우선 순위수학에서와 같은 우선 순위 (괄호가 최우선)

31

Perfect C

콤마 연산자콤마 연산자

,연산자의순위에서가장낮은연산자는콤마연산자

콤마(쉼표) 연산자는좌에서우로연산을수행하며, 그반환값은마지막에수행한연산의결과마지막에수행한연산의결과

이용 int x;

x = 3 + 4, 5 - 10; //위 문장은 (x = 3+4), 5-10;을 의미하여// x에는 7이 저장, 5-10은 의미 없는 구문

printf("%d\n", x); // 출력 값은 7

int x;

x = (3 + 4, 5 – 10); //위 문장은 콤마 연산자를 먼저 수행해 5-10의 결과를// x에 저장, 그러므로 -5가 x에 저장

32

// x에 저장, 그러므로 5가 x에 저장

printf("%d\n", x); // 출력 값은 -5

Page 17: Chapter 05 기본연산자 - mercury.hau.ac.krmercury.hau.ac.kr/sjkwon/Lecture/cprogram/C프로그래밍-chap05,06.pdf · 대입연산자 왼쪽피연산자부분에는 반드시변수만이올수

Perfect C

예제 6-8 소스예제 6 8 소스

priority.c

33

Perfect C

프로그래밍 실습 (예제 6-9)프로그래밍 실습 (예제 6 9)문자의 아스키 코드값의 내부 표현을값의 내부 표현을이진수 그대로출력하는프로그램을 작성

34