![Page 1: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/2.jpg)
목차
연산자의 기본 개념 • 수식 • 연산자와 피연산자
연산자의 종류 • 산술 연산자 • 증감 연산자 • 대입 연산자 • 관계 연산자 • 논리 연산자 • 비트 연산자 • 그 밖의 연산자
연산자의 우선순위와 결합 규칙 2
![Page 3: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/3.jpg)
연산자의 기본 개념
수식(expression) : 연산자와 피연산자의 조합 • 연산자(operator) : 연산에 사용되는 기호 • 피연산자(operand) : 연산의 대상이 되는 값 • 모든 수식에는 반드시 값이 있다 • 수식의 평가 : 수식의 값을 구하는 것
3
amount * price
연산자
피연산자 피연산자
![Page 4: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/4.jpg)
피연산자의 개수로 분류한 연산자
4
![Page 5: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/5.jpg)
연산자의 기능에 따라 분류한 연산자
5
![Page 6: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/6.jpg)
산술 연산자 (1/2)
6
![Page 7: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/7.jpg)
산술 연산자 (2/2)
•부호 연산자 +, - : 단항 연산자
•나누기 연산자(/) : 피연산자가 둘 다 정수인 경우, 몫도 정수가 된다
•나머지 연산자(%) : 피연산자가 모두 정수인 경우에만 사용
7
![Page 8: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/8.jpg)
예제 : 정수의 산술 연산
8
![Page 9: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/9.jpg)
예제 : 실수의 산술 연산
9
![Page 10: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/10.jpg)
나머지 연산자의 활용
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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/11.jpg)
피연산자의 형 변환 규칙
•피연산자 중에 double형이 있으면, 나머지 피연산자를 double형으로 변환한다
•피연산자 중에 float형이 있으면, 나머지 피연산자(정수형)를 float형으로 변환한다
•피연산자 중에 float형이 있으면, 나머지 피연산자(정수형)를 float형으로 변환한다
11
![Page 12: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/12.jpg)
일반적인 산술 변환
• 산술 변환은 이항 연산자의 피연산자를 계산할 때 일어남 • 규칙
둘 중 하나가 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/13.jpg)
예제
선언 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/14.jpg)
자동 형 변환
암시적인 형 변환 • 정수와 실수의 혼합 연산 시 수행되는 형 변환은 자동으로 처리
• 단항 연산자에서는 항상 정수의 승격이 일어난다
• 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/15.jpg)
예제 : 정수와 실수의 혼합 연산
15
![Page 16: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/16.jpg)
증감 연산자 (1/2)
•변수의 값을 1만큼 증가시키거나 감소시키는 단항 연산자 •증감 연산자의 의미
16
![Page 17: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/17.jpg)
증감 연산자 (2/2)
•전위형과 후위형
17
![Page 18: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/18.jpg)
예제 : 증감 연산자의 사용 예
18
![Page 19: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/19.jpg)
대입 연산자
•연산자의 좌변에 있는 변수(l-value)에 우변의 값(r-value)을 저장
•대입 연산자의 좌변에는 변수만 올 수 있다
19
![Page 20: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/20.jpg)
대입 연산식의 값
•대입 연산자의 좌변에 있는 변수의 값이 대입 연산식의 값
20
![Page 21: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/21.jpg)
예제 : 대입 연산식의 값
21
// printf 함수의 return 형: int (글자갯수를 반환)
![Page 22: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/22.jpg)
복합 대입 연산자
•좌변의 변수를 피연산자로 이용해서 연산을 수행하고 연산의 결과를 다시 좌변의 변수에 대입한다
22
![Page 23: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/23.jpg)
복합 대입 연산자의 활용
23
![Page 24: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/24.jpg)
예제 : 복합 대입 연산자의 활용
24
![Page 25: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/25.jpg)
복합 대입 연산자의 우선순위
25
![Page 26: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/26.jpg)
관계 연산자
두 수의 값을 비교하기 위한 연산자 관계 연산식의 값은 항상 참 또는 거짓
• C에서 참(true)은 1이고, 거짓(false)은 0이다
26
![Page 27: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/27.jpg)
예제 : 관계 연산자의 사용 예
27
![Page 28: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/28.jpg)
관계 연산자 사용 시 주의 사항
• 두 값이 같은지 비교할 때는 =가 아니라 ==를 이용해야 한다
• 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/29.jpg)
참, 거짓의 판단
• C에서는 수식이 참인지 거짓인지 판단할 때, 0이 아닌 값은 참으로 간주한다
29
![Page 30: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/30.jpg)
논리 연산자
•참과 거짓을 이용한 논리 연산 기능 •연산의 결과가 항상 참(1) 또는 거짓(0) •피연산자가 0이 아니면 참으로 간주한다
30
![Page 31: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/31.jpg)
논리 연산의 결과
31
![Page 32: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/32.jpg)
예제 : 논리 연산자의 사용 예
32
![Page 33: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/33.jpg)
논리 연산자 사용시 주의 사항
•관계 연산자과 함께 사용하면 관계 연산자부터 수행된다
• && 연산자가 || 연산자보다 우선순위가 높다
33
![Page 34: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/34.jpg)
논리 연산자의 단축 계산
• '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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/35.jpg)
#HW (과제) 입력값을 판별 – 대소문자 변환
• 기한: 2주
• 입력: 대문자 또는 소문자 - 입력되는 값이 대/소문자가 아니면 에러를 출력
• 출력: 대문자는 소문자로, 소문자는 대문자로 변환
• 힌트
- ASCII 코드값 및 논리연산자 활용
35
![Page 36: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/36.jpg)
비트 연산자
•피연산자의 각 비트 단위로 수행되는 연산자
36
![Page 37: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/37.jpg)
비트 논리 연산자
•논리 연산자가 피연산자의 전체 값으로 연산을 수행하는 반면에, 비트 논리 연산자는 각 비트에 대하여 연산을 수행한다
• &, |, ^ 연산자는 피연산자의 데이터형이 일치하지 않으면 형 변환을 수행하여 같은 형으로 만든 후, 피연산자의 각 비트에 대하여 비트 논리 연산을 수행한다
37
![Page 38: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/38.jpg)
비트 AND 연산 (1/2)
38
![Page 39: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/39.jpg)
비트 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/40.jpg)
비트 OR 연산 (1/2)
40
![Page 41: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/41.jpg)
비트 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/42.jpg)
비트 XOR 연산 (1/2)
42
![Page 43: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/43.jpg)
비트 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/44.jpg)
비트 NOT 연산
• 0은 1로, 1은 0으로 반전한다
44
![Page 45: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/45.jpg)
예제 : 비트 논리 연산자의 사용 예
45
![Page 46: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/46.jpg)
비트 이동 연산자
좌변에 있는 피연산자의 비트들을 우변의 피연산자가 지정하는 만큼 왼쪽으로 또는 오른쪽으로 이동(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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/47.jpg)
비트 왼쪽 이동
47
![Page 48: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/48.jpg)
비트 오른쪽 이동
48
![Page 49: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/49.jpg)
마스크
•마스크 : 다른 변수나 수식으로부터 원하는 비트 를 추출하는 데 사용되는 상수나 변수
• 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/50.jpg)
패킹과 언패킹
•패킹 : 여러 정보를 비트단위 연산자를 사용하여 적은 바이트로 압축하는 것
-메모리 절약 -전송 시간 단축
• 언패킹 : 패킹된 정보를 사용하기 전에 정보를 추출하는것
50
![Page 51: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/51.jpg)
패킹 – 예제 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/52.jpg)
52
![Page 53: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/53.jpg)
패킹 – 예제 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/54.jpg)
언패킹-예제 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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/55.jpg)
55
![Page 56: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/56.jpg)
언패킹-예제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](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/57.jpg)
예제 4-11 : 비트 이동 연산자의 사용 예
57
![Page 58: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/58.jpg)
조건 연산자
•피연산자가 3개인 삼항 연산자
58
![Page 59: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/59.jpg)
예제 : 조건 연산자의 사용 예
59
![Page 60: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/60.jpg)
예제 : 게시판 프로그램의 페이지 수 구하기
60
![Page 61: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/61.jpg)
콤마 연산자
•수식의 값을 왼쪽부터 계산해서 마지막으로 계산한 오른쪽 수식의 값이 연산의 결과가 된다
•여러 수식을 한 문장으로 연결할 때 주로 사용된다
61
![Page 62: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/62.jpg)
암시적인 형 변환 (1/2)
•서로 다른 데이터형의 값을 혼합 연산할 때 암시적인 형 변환이 일어난다
62
![Page 63: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/63.jpg)
암시적인 형 변환 (2/2)
정수의 승격 • char형이나 short형의 값이 사용될 때마다 자동으로 int형으로 형 변환된다
• 정수의 승격도 암시적인 형 변환이다
대입 연산이나 변수의 초기화에서도 암시적인 형 변환이 수행된다
• 대입 연산자의 좌변과 대입 연산자의 우변의 데이터형이 다르면, 좌변의 데이터형에 맞추도록 형 변환이 일어난다
• 이 때 값이 손실되면, 컴파일 경고가 발생한다
63
![Page 64: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/64.jpg)
예제 : 암시적인 형 변환
64
![Page 65: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/65.jpg)
정수의 승격과 오버플로우
65
![Page 66: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/66.jpg)
형 변환 연산자 (1/2)
•명시적인 형 변환
• / 연산의 결과를 실수로 구하려면 명시적인 형 변환이 필요하다
66
![Page 67: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/67.jpg)
예제 : 세 수의 평균 구하기
67
![Page 68: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/68.jpg)
연산자의 우선순위
• '변수 = 수식'의 형태인 경우 항상 수식의 값을 먼저 계산한다
•관계 연산자는 논리 연산자보다 우선순위가 높다
• 산술 연산자는 관계 연산자나 논리 연산자보다 우선순위가 높다
68
![Page 69: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/69.jpg)
연산자의 결합 규칙
•대부분의 연산자는 좌 우 방향으로 결합하고 단항 연산자와 대입 연산자는 우 좌 방향으로 결합한다
69
![Page 70: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/70.jpg)
예제 : 연산자의 우선순위와 결합 규칙
70
![Page 71: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/71.jpg)
71
![Page 72: C 언어와 프로그래밍 개요 · 2020-02-05 · 4 장. 연산자 박 종 혁 교수 서울과학기술대학교 컴퓨터공학과 UCS Lab Tel: 970-6702 Email: jhpark1@seoultech.ac.kr](https://reader033.vdocuments.pub/reader033/viewer/2022042302/5ecd0b0db2ac36288a21f92b/html5/thumbnails/72.jpg)
참고문헌
• 천정아, 『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