72
4. 연산자 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: [email protected] 2020-1 st 프로그래밍입문(1)

C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: [email protected]

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

4장. 연산자 박 종 혁 교수

서울과학기술대학교 컴퓨터공학과 UCS Lab

Tel: 970-6702 Email: [email protected]

2020-1st 프로그래밍입문(1)

Page 2: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

목차

연산자의 기본 개념 • 수식 • 연산자와 피연산자

연산자의 종류 • 산술 연산자 • 증감 연산자 • 대입 연산자 • 관계 연산자 • 논리 연산자 • 비트 연산자 • 그 밖의 연산자

연산자의 우선순위와 결합 규칙 2

Page 3: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

연산자의 기본 개념

수식(expression) : 연산자와 피연산자의 조합 • 연산자(operator) : 연산에 사용되는 기호 • 피연산자(operand) : 연산의 대상이 되는 값 • 모든 수식에는 반드시 값이 있다 • 수식의 평가 : 수식의 값을 구하는 것

3

amount * price

연산자

피연산자 피연산자

Page 4: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

피연산자의 개수로 분류한 연산자

4

Page 5: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

연산자의 기능에 따라 분류한 연산자

5

Page 6: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

산술 연산자 (1/2)

6

Page 7: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

산술 연산자 (2/2)

•부호 연산자 +, - : 단항 연산자

•나누기 연산자(/) : 피연산자가 둘 다 정수인 경우, 몫도 정수가 된다

•나머지 연산자(%) : 피연산자가 모두 정수인 경우에만 사용

7

Page 8: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 정수의 산술 연산

8

Page 9: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 실수의 산술 연산

9

Page 10: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

나머지 연산자의 활용

10

pages = items / items_per_page; left = items % items_per_page;

Page 11: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

피연산자의 형 변환 규칙

•피연산자 중에 double형이 있으면, 나머지 피연산자를 double형으로 변환한다

•피연산자 중에 float형이 있으면, 나머지 피연산자(정수형)를 float형으로 변환한다

•피연산자 중에 float형이 있으면, 나머지 피연산자(정수형)를 float형으로 변환한다

11

Page 12: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

일반적인 산술 변환

• 산술 변환은 이항 연산자의 피연산자를 계산할 때 일어남 • 규칙

둘 중 하나가 long double 형이면, 다른 하나는 long double 형으로 변환

아니면, 둘 중 하나가 double 형이면, 다른 하나는 double 형으로 변환

아니면, 둘 중 하나가 float 형이면, 다른 하나는 float 형으로 변환

아니면, 정수적 승격이 일어나고, 다음 규칙 사용: 둘 중 하나가 unsigned long 형이면, 다른 하나는 unsigned long 형으로 변환 아니면, 둘 중 하나가 long 형이고 다른 하나가 unsigned 형이면, 다음 수행: 만일 long 형이 unsigned 형의 모든 값을 표현할 수 있다면, unsigned 형은 long 형으로 변환

아니면, 두 피연산자는 unsigned long 형으로 변환 아니면, 둘 중 하나가 long 형이면, 다른 하나는 long 형으로 변환 아니면, 둘 중 하나가 unsigned 형이면, 다른 하나는 unsigned 형으로 변환 아니면, 두 피연산자는 int 형을 가짐 12

Page 13: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제

선언 char c; short s; int i; long l; unsigned u; unsigned long ul; float f; double d; long double ld;

수식 형 수식 형 c – s / i u * 2.0 – i c + 3 c + 5.0 d + s 2 * i / l

int double int double double long

u * 7 – i f * 7 – i 7 * s * ul ld + c u – ul u – l

unsigned float unsigned long long double unsigned long system-dependent

13

Page 14: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

자동 형 변환

암시적인 형 변환 • 정수와 실수의 혼합 연산 시 수행되는 형 변환은 자동으로 처리

• 단항 연산자에서는 항상 정수의 승격이 일어난다

• int형보다 크기가 작은 경우에는 항상 int형으로 승격된다

14

short a = 10; printf("%d", sizeof(-a)); // 4

int형

short a = 1000, b = 2000; printf("%d", sizeof(a * b)); // 4

int형

Page 15: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 정수와 실수의 혼합 연산

15

Page 16: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

증감 연산자 (1/2)

•변수의 값을 1만큼 증가시키거나 감소시키는 단항 연산자 •증감 연산자의 의미

16

Page 17: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

증감 연산자 (2/2)

•전위형과 후위형

17

Page 18: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 증감 연산자의 사용 예

18

Page 19: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

대입 연산자

•연산자의 좌변에 있는 변수(l-value)에 우변의 값(r-value)을 저장

•대입 연산자의 좌변에는 변수만 올 수 있다

19

Page 20: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

대입 연산식의 값

•대입 연산자의 좌변에 있는 변수의 값이 대입 연산식의 값

20

Page 21: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 대입 연산식의 값

21

// printf 함수의 return 형: int (글자갯수를 반환)

Page 22: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

복합 대입 연산자

•좌변의 변수를 피연산자로 이용해서 연산을 수행하고 연산의 결과를 다시 좌변의 변수에 대입한다

22

Page 23: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

복합 대입 연산자의 활용

23

Page 24: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 복합 대입 연산자의 활용

24

Page 25: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

복합 대입 연산자의 우선순위

25

Page 26: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

관계 연산자

두 수의 값을 비교하기 위한 연산자 관계 연산식의 값은 항상 참 또는 거짓

• C에서 참(true)은 1이고, 거짓(false)은 0이다

26

Page 27: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 관계 연산자의 사용 예

27

Page 28: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

관계 연산자 사용 시 주의 사항

• 두 값이 같은지 비교할 때는 =가 아니라 ==를 이용해야 한다

• 10 < x < 20과 같은 수식을 사용해서는 안된다

28

if (num = 1) // num에 1을 대입하므로 항상 참 printf("이 문장은 항상 출력됩니다.");

Page 29: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

참, 거짓의 판단

• C에서는 수식이 참인지 거짓인지 판단할 때, 0이 아닌 값은 참으로 간주한다

29

Page 30: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

논리 연산자

•참과 거짓을 이용한 논리 연산 기능 •연산의 결과가 항상 참(1) 또는 거짓(0) •피연산자가 0이 아니면 참으로 간주한다

30

Page 31: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

논리 연산의 결과

31

Page 32: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 논리 연산자의 사용 예

32

Page 33: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

논리 연산자 사용시 주의 사항

•관계 연산자과 함께 사용하면 관계 연산자부터 수행된다

• && 연산자가 || 연산자보다 우선순위가 높다

33

Page 34: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

논리 연산자의 단축 계산

• 'expr1 && expr2'에서 expr1이 거짓이면 expr2는 평가되지 않는다 ( 즉, expr2는 expr1이 참일 때만 평가된다 )

• 'expr1 || expr2'에서 expr1이 참이면 expr2는 평가되지 않는다 ( 즉, expr2는 expr1이 거짓일 때만 평가된다 )

34

Page 35: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

#HW (과제) 입력값을 판별 – 대소문자 변환

• 기한: 2주

• 입력: 대문자 또는 소문자 - 입력되는 값이 대/소문자가 아니면 에러를 출력

• 출력: 대문자는 소문자로, 소문자는 대문자로 변환

• 힌트

- ASCII 코드값 및 논리연산자 활용

35

Page 36: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 연산자

•피연산자의 각 비트 단위로 수행되는 연산자

36

Page 37: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 논리 연산자

•논리 연산자가 피연산자의 전체 값으로 연산을 수행하는 반면에, 비트 논리 연산자는 각 비트에 대하여 연산을 수행한다

• &, |, ^ 연산자는 피연산자의 데이터형이 일치하지 않으면 형 변환을 수행하여 같은 형으로 만든 후, 피연산자의 각 비트에 대하여 비트 논리 연산을 수행한다

37

Page 38: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 AND 연산 (1/2)

38

Page 39: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 AND 연산 (2/2)

비트마스크(bitmask) 또는 마스크(mask) • 비트 논리 연산에서 이용되어 특정 비트 값을 조작하기 위한 목적의 데이터

x와 y를 비트 AND 연산하면 x의 값 중에 y의 비트가 1인 부분의 값만 유지되고, 나머지 비트는 모두 0이 된다

39

Page 40: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 OR 연산 (1/2)

40

Page 41: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 OR 연산 (2/2)

• x와 y를 비트 OR 연산하면 x의 값 중에 y의 비트가 0인 부분의 값만 유지되고, y의 비트가 1인 부분은 모두 1이 된다

41

Page 42: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 XOR 연산 (1/2)

42

Page 43: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 XOR 연산 (2/2)

• x와 y를 비트 XOR 연산하면 x의 값 중에 y의 비트가 1인 부분은 토글되고, y의 비트가 0인 부분의 값은 유지된다

43

Page 44: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 NOT 연산

• 0은 1로, 1은 0으로 반전한다

44

Page 45: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 비트 논리 연산자의 사용 예

45

Page 46: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 이동 연산자

좌변에 있는 피연산자의 비트들을 우변의 피연산자가 지정하는 만큼 왼쪽으로 또는 오른쪽으로 이동(shift)한다 비트 왼쪽 이동(<<) 연산자

• 비트들을 왼쪽으로 이동 • 왼쪽으로 밀려난 비트는 사라지고 오른쪽 빈 자리에 0을 채운다 • n 비트 왼쪽 이동은 2n을 곱하는 것과 같다

비트 오른쪽 이동(>>) 연산자 • 비트들을 오른쪽으로 이동 • 오른쪽으로 밀려난 비트는 사라지고 왼쪽 빈 자리에 부호 비트를 채운다

• 연산자의 좌변이 부호 없는 정수형이면 왼쪽 빈 자리를 0으로 채운다 • n 비트 오른쪽 이동은 2n 으로 나누는 것과 같다

46

Page 47: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 왼쪽 이동

47

Page 48: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

비트 오른쪽 이동

48

Page 49: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

마스크

•마스크 : 다른 변수나 수식으로부터 원하는 비트 를 추출하는 데 사용되는 상수나 변수

• int 형 상수 1의 비트 표현: 00000000 00000000 00000000 00000001

- 이것을 사용하여 int 형 수식의 최하위 비트를 알아 낼 수 있음

49

Page 50: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

패킹과 언패킹

•패킹 : 여러 정보를 비트단위 연산자를 사용하여 적은 바이트로 압축하는 것

-메모리 절약 -전송 시간 단축

• 언패킹 : 패킹된 정보를 사용하기 전에 정보를 추출하는것

50

Page 51: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

패킹 – 예제 1

• 직원 관리 프로그램에서 다음과 같은 정보를 다루어야 한다고 가정 – 직원 ID : 6자리(10진수) – 작업형태 : 200가지 – 성별

• 이 세가지 정보는 unsigned int에 패킹 가능 – 직원 ID : 20비트

- 작업형태 : 8비트 - 성별 : 1비트 - 총 : 29비트

• unsigned int 사용의 예

51

Page 52: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

52

Page 53: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

패킹 – 예제 2

• 4 개의 문자를 하나의 int 형에 패킹하는 함수

#include <limits.h> int pack(char a, char b, char c, char d){ int p = a; p = (p << CHAR_BIT) | b; p = (p << CHAR_BIT) | c; p = (p << CHAR_BIT) | d; return p; }

53

Page 54: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

언패킹-예제 1

• 패킹된 정보는 사용하기 전에 언패킹해야 함 • 적절한 마스크 필요 • 직원 관리 프로그램에서

– 직원 ID를 위한 마스크 : 20개의 1 – 작업 형태를 위한 마스크 : 8개의 1 – 성별을 위한 마스트 : 1개의 1

54

Page 55: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

55

Page 56: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

언패킹-예제2

• 32 비트 int 안에 있는 문자를 검색하는 함수 (마 스크 사용)

#include <limits.h> char unpack(int p, int k) { /* k = 0, 1, 2, or 3 */ int n = k * CHAR_BIT; /* n = 0,8,16, or 24 */ unsigned mask = 255; /* low-order byte */ mask <<= n; return ((p & mask) >> n); }

56

Page 57: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 4-11 : 비트 이동 연산자의 사용 예

57

Page 58: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

조건 연산자

•피연산자가 3개인 삼항 연산자

58

Page 59: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 조건 연산자의 사용 예

59

Page 60: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 게시판 프로그램의 페이지 수 구하기

60

Page 61: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

콤마 연산자

•수식의 값을 왼쪽부터 계산해서 마지막으로 계산한 오른쪽 수식의 값이 연산의 결과가 된다

•여러 수식을 한 문장으로 연결할 때 주로 사용된다

61

Page 62: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

암시적인 형 변환 (1/2)

•서로 다른 데이터형의 값을 혼합 연산할 때 암시적인 형 변환이 일어난다

62

Page 63: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

암시적인 형 변환 (2/2)

정수의 승격 • char형이나 short형의 값이 사용될 때마다 자동으로 int형으로 형 변환된다

• 정수의 승격도 암시적인 형 변환이다

대입 연산이나 변수의 초기화에서도 암시적인 형 변환이 수행된다

• 대입 연산자의 좌변과 대입 연산자의 우변의 데이터형이 다르면, 좌변의 데이터형에 맞추도록 형 변환이 일어난다

• 이 때 값이 손실되면, 컴파일 경고가 발생한다

63

Page 64: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 암시적인 형 변환

64

Page 65: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

정수의 승격과 오버플로우

65

Page 66: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

형 변환 연산자 (1/2)

•명시적인 형 변환

• / 연산의 결과를 실수로 구하려면 명시적인 형 변환이 필요하다

66

Page 67: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 세 수의 평균 구하기

67

Page 68: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

연산자의 우선순위

• '변수 = 수식'의 형태인 경우 항상 수식의 값을 먼저 계산한다

•관계 연산자는 논리 연산자보다 우선순위가 높다

• 산술 연산자는 관계 연산자나 논리 연산자보다 우선순위가 높다

68

Page 69: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

연산자의 결합 규칙

•대부분의 연산자는 좌 우 방향으로 결합하고 단항 연산자와 대입 연산자는 우 좌 방향으로 결합한다

69

Page 70: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

예제 : 연산자의 우선순위와 결합 규칙

70

Page 71: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

71

Page 72: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr

참고문헌

• 천정아, 『Core C Programming』, 연두에디션(2019) • C가 보이는 그림책, ANK Co., Ltd. , 성안당 (2018) • Greg Perry, Dean Miller 『어서와 C언어는 처음이지』, 천인국 옮김, 인피니티북스(2015)

• KELLEY (역 : 김명호 외), 『A Book on C』, 홍릉과학출판사(2003)

• 윤성우, 『 열혈 C 프로그래밍』, 오렌지미디어 • 천인국, 『 쉽게 풀어쓴 C언어 Express』, 생능출판사 • 서현우, 『 뇌를 자극하는 C 프로그래밍』, 한빛미디어 • 강성수, 『 쾌도난마 C프로그래밍』, 북스홀릭 • 고응남, 『 C프로그래밍 기초와 응용실습』, 정익사 • 김명호, 소프트웨어ㅕ 개발자를 위한 C프로그래밍

72