Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 06 연산자 기본.

Similar presentations


Presentation on theme: "Chapter 06 연산자 기본."— Presentation transcript:

1 Chapter 06 연산자 기본

2 연산자와 피연산자 연산자 피연산자 연산자의 기능별 분류
연산자(operator)는 산술연산자 +, -, * 기호와 같이, 이미 정의된 연산을 수행하는 기호나 키워드를 의미 피연산자 연산(operation)에 참여하는 변수나 값을 피연산자(operand) 연산자의 기능별 분류 기능이나 특징으로 분류 피연산자 피연산자 연산자 분류 연산자 산술 연산자 관계 연산자 증감 연산자 논리 연산자 조건 연산자 비트 논리 연산자 비트 이동 연산자 sizeof 연산자 대입 연산자 + - * / % > < == != >= <= ++ -- && || ! ?: & | ^ ~ << >> sizeof(형) =

3 항 수에 따른 구분 연산에 참여하는 피연산자의 수에 따라 단항 연산자 이항 연산자 삼항 연산자
단(일)항, 이항, 삼항 연산자로 구분 단항 연산자 연산에 참여하는 피연산자가 하나인 경우는 일항 연산자 이항 연산자 연산에 참여하는 피연산자가 두 개인 경우는 이항 연산자 삼항 연산자 연산에 참여하는 피연산자의 수가 세 개인 것은 조건 연산자 하나뿐 산술연산의 + 기호는 기호 양쪽의 값을 더하는 연산을 의미하므로 이항 연산자이다. 부호를 의미하는 연산자인 - 기호는 기호 오른쪽 값의 부호를 의미하는 단항 연산자이다. 조건 연산자는 연산자 기호 가 ? : 이며 세 부분에 피연산자가 위치하는 삼항 연산자이다. 분류 연산자 단항 연산자 이항 연산자 삼항 연산자 ! & * sizeof(형) + - * / % = == != > < <= >= && || & | ^ ?:

4 수식 연산식 수식의 평가 컴퓨터는 수식(expression)을 이용하여 여러 가지 연산 처리
프로그램 언어에서 수식은 연산자(operator)와 피연산자(operand)의 조합으로 구성 피연산자는 변수나 상수, 또는 다른 수식으로 표현 가장 간단한 수식은 7, -5와 같은 단일 항목으로 구성되는 상수 값 이러한 수식이 연산자와 연결되어 새로운 수식을 구성 여기서 ‘+’는 연산자이고, ‘7’과 ‘5’는 피연산자에 해당 수식은 항상 그 평가에 의한 결과 값을 갖음 즉 위의 수식은 12라는 결과 값 수식의 평가 연산식의 평가(evaluation)는 그 연산식의 계산 ‘7 + 5’를 평가하면 ‘12’, 이 때 평가된 ‘12’를 ‘식의 평가값’ 연산자는 우선순위(operator priority)를 갖는데, 산술연산자에서의 우선순위는 *, /, %를 먼저하고 +, -를 나중에 계산

5 대입 연산자 = =의 결과 값 변수의 저장 값을 대입하는 = 기호가 대입(할당) 연산자(assignment operator)
대입 연산자는 연산자의 가장 기본이 되는 연산자이며, 그 기능을 가장 늦게 수행 다음과 같은 연산식에서는 * 5를 수행한 결과 값을 변수 a에 대입하는 기능을 가장 늦게 수행 =의 결과 값 대입 연산자도 연산자이므로 연산을 수행한 후의 결과값이 존재 위에서 대입 연산의 결과 값은 왼쪽 변수에 저장된 값인 23 대입 연산자의 왼쪽 부분에는 반드시 변수만이 가능 그러므로 다음과 같은 연산식은 잘못된 것

6 문장과 대입문 문장 대입문 문법에 맞는 수식에 세미콜론 ;을 마지막에 놓으면 문장(statement)이 됨
즉 3+2;도 하나의 문장 그러나 이러한 문장은 프로그램에는 아무 영향을 미칠 수 없음 대입문 대입 연산자가 있는 연산식에 세미콜론 ;을 붙이면, 대입문(assign statement) 이러한 대입문은 변수의 값을 변화시키므로 매우 중요한 문장

7 예제 소스 Assign.c 다음 프로그램으로 연산식과 문장을 이해하고, 대입 연산자의 결과 값을 출력

8 산술연산자 +, -, *, / 산술 연산자는 더하기, 빼기, 곱하기, 나누기를 하는 사칙 연산자와 나머지를 구하는 연산자로 구성 나머지 연산자 % 첫 번째 피연산자를 두 번째 피연산자로 나눌 때 그 나머지를 평가값으로 반환 예를 들어 7%5의 값은 2, 즉 7을 5로 나누면, 몫은 1이고, 나머지는 2 또한 나누기 연산자에서 7/5의 결과는 1 정수 7과 정수 5로 나누기를 연산하면 결과는 소수 부분은 나올 수 없으므로 평가값은 1 연산자 기호 의미 더하기 빼기 곱하기 나누기 나머지 op1 + op2 op1 – op2 op1 * op2 op1 / op2 op1 % op2 두 피연산자를 더한다. 첫 번째 피연산자(op1)에서 두 번째 피연산자(op2)를 뺀다. 두 피연산자를 곱한다. 첫 번째 피연산자(op1)를 두 번째 피연산자(op2)로 나누어 몫을 준다. 첫 번째 피연산자(op1)를 두 번째 피연산자(op2)로 나누어 나머지를 준다.

9 실습 예제 Calcarithmetic.c 사용자 입력 정수를 표준입력으로 각각 변수 x와 y 두 개의 변수에 저장
위 변수의 값을 이용하여 더하기, 빼기, 곱하기, 나누기와 나머지를 적당한 연산자를 이용하여 출력

10 실습 예제 Calcsquarearea.c 사용자 입력 정수를 표준입력으로 입력 받아 변수 width에 저장
이 변수의 값을 이용하여 정사각형의 넓이를 구하여 결과를 다음과 같이 적절히 출력

11 관계연산자 관계 연산자는 2개의 피연산자 크기를 비교하기 위한 연산자
예를 들어 “x가 10보다 더 큰가?” 또는 “y가 0과 같은가?”와 같이 두 항의 값을 비교하는데 사용 두 개의 문자로 구성되는 관계연산자 기호 사이에는 공백문자가 없이 연결되어야 함 관계 연산자 “!=”, “>=”, “<=”는 연산 기호의 순서가 명확해야 함 관계 연산자 ==과 할당 연산자 =를 혼동하지 않도록 주의 문자 순서가 바뀐 =>은 연산자로 사용할 수 없다. 연산자 기호 의미 보다 크다 보다 작다 같다 같지 않다 크거나 같다 작거나 같다 op1 > op2 op1 < op2 op1 == op2 op1 != op2 op1 >= op2 op1 <= op2 피연산자 op1이 피연산자 op2보다 크면 참 피연산자 op1이 피연산자 op2보다 작으면 참 피연산자 op1이 피연산자 op2와 같으면 참 피연산자 op1이 피연산자 op2와 다르면 참 피연산자 op1이 피연산자 op2보다 크거나 같으면 참 피연산자 op1이 피연산자 op2보다 작거나 같으면 참

12 관계 연산 평가 관계 연산 평가 값 관계 연산자가 포함된 수식의 결과는 1(참을 의미)이 아니면 0(거짓을 의미)
아래 표는 간단한 관계연산의 평가 결과 조건 평가 3 > 2 3 == 2 3 != 2 (3 + 2) == (3 * 2) 3은 2보다 큰가? 3은 2와 같은가? 3은 2와 같지 않은가? (3 + 2)는 (3 * 2)와 같은가? 1

13 예제 소스 Isplusdigit.c 사용자 입력 정수를 표준입력으로 하나의 변수 x에 저장
이 프로그램은 입력한 정수가 양수이면 1을 출력하고, 0이거나 음수이면 0을 출력하는 프로그램

14 증감 연산 증감 연산자 기호 ++, --를 이용 피연산자는 연산자의 앞이나 뒤에 위치
증가 연산자는 ++a, a++와 같이 사용 이 연산자는 다른 연산자와 같이 연산의 결과(평가) 값을 갖음 증감연산자는 다른 연산자와 다르게 평가에 의한 결과 값만 있는 것이 아니라 연산에 참여하는 피연산자의 값 자체가 1 증가하거나 1 감소 증감연산자는 연산자의 위치에 따라 ++a, a++, --a, a-- 형태로 쓰이며, 피연산자를 1만큼 줄이거나 늘리는 데에 사용 즉 연산 a+1은 a 값에는 변화를 주지 않으나, a++는 변수 a의 값을 하나 증가시키는 효과 수식a++와 ++a는 평가 값이 서로 다름

15 연산자 위치가 중요 a++, ++a a--, --a 연산자 위치
그러나 변수 자체는 두 연산 모두 1 증가 결국 증가연산자 ++a와 a++는 모두 a=a+1의 효과 a--, --a 감소 연산자가 변수 앞에 위치(--a)하면 수식의 평가값은 1 감소한 값이나, 변수 뒤에 위치(a--)하면 수식의 평가값은 1이 감소하기 이전 원래의 값 변수 자체는 두 연산 모두 1 감소한다. 감소연산자 --a와 a--는 모두 a=a-1의 효과 연산자 위치 모두 연산의 평가 결과는 연산자의 위치에 따라 다르다는 것에 주의 증감연산자의 위치가 피연산자보다 앞에 위치하는 형태의 표현 ++a, --a을 전위 방식(prefix) 마찬가지로 증감연산자의 위치가 피연산자보다 뒤에 위치하는 형태의 표현 a++, a--을 후위 방식(postfix)

16 증가 연산과 산술 연산 증가연산자 ++와 일반 산술 연산자와의 차이를 이해 일반 연산 증가 연산

17 증감 연산자 정리 예 예제 1 예제 2 연산자 기호 의미 증가 ++ 기호 이용 ++a(prefix 표현)
a++(postfix 표현) 피연산자 변수의 값을 1 증가시킨다. 평가값은 1 증가한 값이다. 평가값은 1 증가하기 이전 값이다. 감소 -- 기호를 이용 --a(prefix 표현) a--(postfix 표현) 피연산자 변수의 값을 1 감소시킨다. 평가값은 1 감소한 값이다. 평가값은 1 감소하기 이전 값이다. 예제소스 출력 값 변수 x 값 int x = 10; x = x + 1; x = x – 1; printf(“%d\n”, x+1); printf(“%d\n”, x); printf(“%d\n”, x-1); 11 10 9 예제소스 출력 값 변수 x 값 int x = 10; x++; x--; printf(“%d\n”, x++); printf(“%d\n”, ++x); printf(“%d\n”, x--); printf(“%d\n”, --x); 10 12 11

18 장점과 주의점 증감연산 사용 이유 주의점 증감연산자를 이용하면 프로그램 형태가 간결
기계어 코드와 일대일 대응되므로 실행속도가 개선 주의점 연산자의 위치에 따라 평가 값 다르므로 주의 요구 증감연산자는 ++, --자체가 연산자 기호이므로 중간에 공백이 들어가면 안되고, 산술연산이나 관계, 논리연산보다 그 평가를 먼저 한다. 증감연산자는 피연산자로 변수를 사용할 수 있지만, 상수나 일반 수식을 피연산자로 사용 불가능 다음과 같은 수식은 잘못된 수식 int a = 10; ++300; /* 상수에는 증가 연산자를 사용할 수 없다 */ (a+1)--; /* 일반 수식에는 증가 연산자를 사용할 수 없다 */

19 예제 소스 Basicincrement.c 증감연산자의 예제를 작성하여 결과를 비교
증감연산자의 평가 값과 변수의 값을 증감시키는 효과를 이해

20 예제 소스 Increment.c 증감연산자가 다른 산술연산자와 함께 이용되는 예를 살펴보자. 증감연산자는 산술연산자보다 연산을 먼저 처리한다는 것에 주의

21 논리 연산자 &&(and), ||(or), !(not)
논리 연산자는 두 개 또는 하나의 논리값을 0이나 1의 논리값으로 평가하기 위한 연산자 C 언어에서는 논리 값이라는 유형은 없고, 다만 0은 거짓을 의미하며, 0이 아닌 것은 참을 의미하는 것으로 논리값을 대신 연산자 &&는 수학에서의 and를 의미 연산자 ||은 or를 의미 연산자 &, |가 and와 or로 사용하나 정확히 말하자면 연산자 &와 |는 비트 연산자 연산자 의미 연산 기호 의미 AND OR NOT op1 && op2 op1 || op2 !op1 연산자의 왼쪽 값(op1)과 오른쪽 값(op2)의 AND 연산 수행 연산자의 왼쪽 값(op1)과 오른쪽 값(op2)의 OR 연산 수행 단일 연산자로서 연산자 오른쪽 값(op1)의 NOT 연산 수행

22 논리 연산자 논리 연산자의 연산 방법 연산에 참여하는 자료 값은 0은 거짓을 의미하며, 1(0이 아닌 값)은 참을 의미
C 언어는 참과 거짓이라는 상수는 없으며, 단순히 0을 거짓으로, 0이 아닌 값을 참으로 간주 정수 만을 이용하는 것은 아니고 실수나 다른 유형의 자료 값도 이용이 가능 다만 평가의 결과는 반드시 0이거나 1 x y And 연산자 결과 Or 연산자 결과 Not 연산자 결과 x && y x || y !x 1 (0 이아닌 값) 수식 평가 결과 x && y x || y !x x와 y가 모두 1일 때만 1, 그렇지 않으면 0 x와 y가 모두 0일 때만 0, 그렇지 않으면 1 x가 0이면 1, x가 1이면 0, 즉 x의 반대 값

23 논리 연산 예 5 > 2 && 3 == 2

24 논리 연산 이용 논리 연산자는 수식에 포함된 그들의 피연산자의 0이 아닌 값(참을 의미)과 0인 값(거짓)에 따라 1이나 0으로 평가 결과가 도출 수식 평가 결과 이유 (5 > 2) && (3 == 2) (5 > 2) || (3 == 2) !(3 == 2) 1 오른쪽 (3 == 2)의 결과가 0이기 때문에 왼쪽 (5 > 2)의 결과가 1이기 때문에 연산식 (3 == 2)이 0이므로 수식 평가 결과 이유 3 && 4 0.0 && 4 1 && 1 (3 > 4) || !(4==1) 0.3 || 0.2 0 || 0 1 3과 4 모두 0이 아니므로 참인 의미의 1임 소수 0.0도 거짓을 의미하는 0임 !(4==1)이 1임 0이 아닌 것은 모두 참인 의미의 1임

25 예제 소스 Logic.c 위에서 살펴 본 논리연산자의 예제를 프로그래밍하여 결과를 비교
논리연산자의 평가 값은 0과 1, 두 값 중의 하나

26 단축 연산 논리 연산 &&, || Short circuit logic
비트 연산자 &와 |는 논리연산자로도 이용 가능 Short circuit logic 논리 연산자 &&와 ||는 피연산자 두 개 중에서, 앞에 나오는 피연산자 만으로 결과가 결정되면 뒤에 나오는 피연산자는 평가하지 않고 결과를 반환 이러한 방법으로 연산의 효율을 높일 수 있기 때문 (x && y) 수식에서 x의 값이 거짓이라면, 굳이 y의 값을 평가하지 않더라도 수식 (x && y)는 거짓 (x || y) 수식에서 x의 값이 참이라면, 굳이 y의 값을 평가하지 않더라도 수식 (x || y)는 참

27 &&의 평가 효율적 평가 변수 a, b, c가 각각 10, 20, 3인 경우
다음 논리 연산식을 포함한 대입문이 실행된 후의 변수 값은 각각 무엇으로 변했을까? c = (a++ == 11) && (b++ == 20); 여기서 주의할 점은 만일 (a++ == 11)이 0이면 더 이상 (b++ == 20)을 평가 하지 않는다는 것이다. 또한 만일 (b++ == 20)을 평가하지 않으면 변수 b는 1이 증가하지 않을 것이다. 위 문장이 실행된 이후에 다음 문장을 실행하면, 변수 a, b, c는 어떠한 값이 저장 되었을까?

28 예제 소스 Shortcircuit.c 단축 연산이 프로그램에 미치는 영향

29 프로그램 연습 프로그램 목적 킬로그램(kg) 단위의 몸무게를 파운드(pound)로, 센티미터(cm) 단위의 키를 피트(feet)로 바꾸는 프로그램 1피트(feet)는 30.48센티미터(cm)로 하고 1파운드(pound)는 킬로그램(kg)으로 구현 표준입력으로 킬로그램(kg) 단위의 몸무게, 센티미터(cm) 단위의 키를 입력 입력 받은 자료를 각각 파운드(pound)와 피트(feet)로 변환하여 몸무게와 키를 출력


Download ppt "Chapter 06 연산자 기본."

Similar presentations


Ads by Google