Microsoft PowerPoint - KNK_C03_Expr_kor

Similar documents
KNK_C03_Expr_kor

OCW_C언어 기초

Microsoft PowerPoint - chap04-연산자.pptx

Microsoft PowerPoint - Chapter_02.pptx

06 세상을 변화시키는 연산자

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

4.0 개요 p.116 수식 (expression) 연산자 (operator) 와피연산자 (operand) 로구성 수식은평가 (evaluate) 되어최종적으로 1 개의결과값이됨 피연산자 : 상수, 변수, 또다른수식 sum - 10 (a+b) / 2 연산자 2

금오공대 컴퓨터공학전공 강의자료

chap x: G입력

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - ch07 - 포인터 pm0415

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

Microsoft PowerPoint - chap-05.pptx

1.1.1 컴퓨터의 구성 p.19

Microsoft PowerPoint - 제5장-스택의응용.pptx

PowerPoint 프레젠테이션

chap x: G입력

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - chap06-2pointer.ppt

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

Microsoft PowerPoint - C++ 5 .pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

KNK_C_05_Pointers_Arrays_structures_summary_v02

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - Lesson2.pptx

11장 포인터

1.4.3 증감연산자 후치증가 a++: 프로그램의한명령줄이끝나고 1을증가시킨값을다시 a에저장. 후치감소 a--: 프로그램의한명령줄이끝나고 1을감소시킨값을다시 a에저장. 전치증가 ++a: 1을증가시킨값을미리 a에저장하고프로그램을수행. 전치감소 --a: 1을감소시킨값을미리

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

<4D F736F F F696E74202D20C1A635C0E520BCF6BDC4B0FABFACBBEAC0DA>

Microsoft PowerPoint - c2.ppt

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap-03.pptx

C++ Programming

Microsoft PowerPoint - [2009] 02.pptx

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

컴파일러

<4D F736F F F696E74202D20C1A63036C0E520BCB1C5C3B0FA20B9DDBAB928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - hw8.ppt [호환 모드]

Slide 1

C# Programming Guide - Types

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

chap 5: Trees

1 01 [ ] [ ] plus 002

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

쉽게

int main(void) int a; int b; a=3; b=a+5; printf("a : %d \n", a); printf("b : %d \n", b); a b 3 a a+5 b &a(12ff60) &b(12ff54) 3 a 8 b printf(" a : %x \

KNK_C02_form_IO_kor

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Microsoft PowerPoint - Chapter_08.pptx

Microsoft PowerPoint - 1-2장 디지털_데이터 .ppt

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

No Slide Title

Microsoft PowerPoint - chap-06.pptx

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

Infinity(∞) Strategy

03장.스택.key

JAVA PROGRAMMING 실습 02. 표준 입출력

슬라이드 1

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

untitled

슬라이드 1

쉽게 풀어쓴 C 프로그래밍

PowerPoint 프레젠테이션

PowerPoint Presentation

2 장수의체계 1. 10진수 2. 2진수 3. 8진수와 16진수 4. 진법변환 5. 2진정수연산과보수 6. 2진부동소수점수의표현 한국기술교육대학교전기전자통신공학부전자전공 1

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

03장.스택

ABC 2장

Microsoft PowerPoint - chap06-1Array.ppt

Microsoft PowerPoint - lec3.ppt

05_tree

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

03-JAVA Syntax(2).PDF

슬라이드 1

PowerPoint Presentation

Introduction to Computer Science

0. 표지에이름과학번을적으시오. (6) 1. 변수 x, y 가 integer type 이라가정하고다음빈칸에 x 와 y 의계산결과값을적으시오. (5) x = (3 + 7) * 6; x = 60 x = (12 + 6) / 2 * 3; x = 27 x = 3 * (8 / 4

Microsoft PowerPoint - 제11장 포인터(강의)

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - 제11장 포인터

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

프로그램의실행화면 주석 (comment) 두수의합 : 300 /* 두개의숫자의합을계산하는프로그램 */ 주석은코드를설명하는글입니다. 주석 3 가지방법의주석 주석의예 /* 한줄로된주석 */ /* 저자 : 홍길동날짜 : 2013.

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

Chapter_06

<4D F736F F F696E74202D20C1A633C0E52043C7C1B7CEB1D7B7A5B1B8BCBABFE4BCD2>

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - 강의자료8_Chap9 [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드]

1

PHP & ASP

Microsoft PowerPoint - 01_(C_Programming)_(Korean)_C_Language-Overview

중간고사

PowerPoint Presentation

Microsoft PowerPoint - KNK_C01_intro_kor

자연언어처리

Transcription:

Expressions adopted from KNK C Programming : A Modern Approach Operators 연산자 C 는표현식을많이사용함 표현식은변수와상수와연산자로구성됨 C 에는연산자의종류가다양함 1. arithmetic operators ( 수식연산자 ) 2. relational operators ( 관계연산자 ) 3. logical operators ( 논리연산자 ) 4. assignment operators ( 할당연산자 ) 5. increment and decrement operators ( 증감연산자 ) 그외에도더있음 2 Arithmetic Operators 수식연산자 C 이항수식연산자arithmetic operators: + addition An operator is binary - subtraction if it has two operands. * multiplication / division Ex: A*B, A+B % remainder 단항수식연산자 : + unary plus - unary minus i = +1; j = -i; 음수양수구분용 Binary Arithmetic Operators i%j 의값은 i 를 j 로나눈나머지. 10%3 의값은 1, 12%4 는 0. 이항수식연산자는 % 를제외하면정수와실수피연산자를혼용해서쓸수있음 int 와 float 형피연산자가혼용되면결과는 float. 9+ 2.5f 의결과는 11.5, 6.7f/2 는 3.35. 3 4

/ 와 % 연산자 / 와 % 는주의를요하는연산자 : 두피연산자가정수면, / 소수점이하는버림. 1/2 의결과는 0 이다.0.5 가아님. % 연산자는정수만피연산자로받음 ; 어느하나라도정수가아니면컴파일이안됨 우측피연산자로 0 을쓸경우 / 또는 % 는정의되지않은동작을함 Operator Precedence ( 연산자우선순위 ) i+j*k 의의미가 i 와 j 를더하고, 그결과를 k 로곱하라 일까 j 와 k 를곱하고, i 를더하라 일까? 명확히하는방법은 (i+j)*k 또는 i+(j*k) 처럼괄호로묶는것. 괄호가없으면, C 는연산자우선순위 operator precedence 규칙에따라처리함 우선순위를모를때는괄호를써서먼저계산한것을표시! / 과 % 에음수피연산자가사용될경우 C89 의경우 implementationdefined( 구현에따라다름 ). C99 에서는, 나눗셈의결과는항상 0 방향으로내림, 그리고 i%j 의결과는 i 의부호와같음. 5 6 Operator Precedence 수식연산자의우선순위는간략하게다음과같음 : Highest: + -(unary) * / % Lowest: + -(binary) Examples: i+j*k 와 i+(j*k) 는동치 -i*-j 와 (-i)*(-j) 는동치 +i+j/k 와 (+i)+(j/k) 는동치 Operator Associativity ( 연산자결합 ) Associativity 결합은동일한우선순위의연산자들이포함된수식에서적용됨 연산자들의결합방향이왼쪽에서오른쪽으로진행된다면 left associative 왼쪽결합 이항수식연산자 (*, /, %, +, -) 는 left associative i-j k 와 (i-j)-k 는동치 i*j/k 와 (i*j)/k 는동치 연산의결합방향이오른쪽에서왼쪽이면 right associative 오른쪽결합. 단항수식연산자 (+,-) 는 right associative -+i 와 -(+i) 는동치 7 8

Assignment Operators 할당연산자 1. Simple assignment 단순할당 : 변수에값저장에사용 2. Compound assignment 합성할당 : 변수에저장된값을갱신할때사용 Simple Assignment 단순할당 v=e 은 e 의표현식의값을 v 로복사하라는말과같음 e 상수일수도또는복잡합표현식일수있음 : i = 5; /* i is now 5 */ j = i; /* j is now 5 */ k = 10 * i + j; /* k is now 55 */ 만약 v 와 e 가같은형이아니면 e 의형은 v 의형으로변환됨 int i; float f; i = 72.99f; /* i is now 72 */ f = 136; /* f is now 136.0 */ 9 10 Side Effects 피연산자의값을변형시키는연산자를 side effect 가있다고함 단순할당연산자는 side effect 가있음 : 좌변의변수를변경함 i=0 를분석해보면우변의결과는 0 이됨. 그리고 side effect 로인해 i 에 0 을저장함. 할당은연산자이기때문에여러할당연산이한줄에사용될수있음 : i = j = k = 0; = 는오른쪽결합이기때문에아래와동치임 i = (j = (k = 0)); Side Effects 그러나한줄에할당을여러번할경우값이변환되는경우를주의해야함 : int i; float f; f = i = 33.3f; i 는 33 를저장, f 는 33.0 (not 33.3) 을저장. 11 12

Side Effects v=e 형태의할당은 v 의타입이허용되는모든경우에대해사용할수있음 : k = 1 + (j = i); // 수식내에할당을포함할경우 // 읽기어렵고, 버그의온상임 printf("%d %d %d\n", i, j, k); /* prints "1 1 2" */ Lvalues 할당연산자는왼쪽피연산자로 lvalue 를필요로함. lvalue 는컴퓨터메모리에저장된객체로서상수도계산결과도아님. 변수가 lvalues 임 ; 10 또는 2*i 는아님. 12 = i; /*** WRONG ***/ i + j = 0; /*** WRONG ***/ -i = j; /*** WRONG ***/ 컴파일러는이런경우 invalid lvalue in assignment. 라는오류메시지를출력함 13 14 Compound Assignment 합성할당 변수의과거의값을사용하여새로운값을다시원래의변수에저장하는경우는매우흔함 i = i + 2; += 합성할당연산자로간단하게표현할수있음 : i += 2; /* same as i = i + 2; */ Compound Assignment 합성할당연산자는소개한것외에도9개가더있음. 그중일부는 : -= *= /= %= 모든합성할당연산자는동일한방식으로동작 : v+=e:v 를e에더하고, v에결과저장 v-=e:v 를e에서빼고, v에결과저장 v*=e:v 를e와곱하고, v에결과저장 v/=e:v 를e로나누고, v에결과저장 v%=e:v 를e로나눈나머지를, v에저장 v+=e 가 v=v+e 언제나동치는아님. 연산자우선수위가있기때문에 i*=j+k 는 i=i*j+ k 와동치가아님 15 16

증감, 가감연산자 변수에가장자주사용되는연산은 증가 ( 더하기 1) 그리고 가감 ( 빼기 1): C 는이를위해 ++( 증가 ) 그리고 --( 감소 ) 연산자제공. ++ 연산자는피연산자에 1 을더하고,-- 연산자는 1 을뺌. prefix 연산자 (++i, -i) 또는 postfix 연산자 (i++,i--). ++i ( 먼저더함 ) 는 i+1 를뜻하고 side effect 로 i 는증가됨 printf("i is %d\n", ++i); /* prints "i is 2" */ printf("i is %d\n", i); /* prints "i is 2" */ i++( 후에더함 ) 의결과는 i 이고, 그다음 i 의값이증가됨 printf("i is %d\n", i++); /* prints "i is 1" */ printf("i is %d\n", i); /* prints "i is 2" */ i = i + 1; j = j - 1; i += 1; j -= 1; i++; ++i; j--; --i; 합성할당연산자 증가감소연산자 ++i 는 i 를즉시증가 를뜻함 i++ 는 현재의 i 값을쓰고, 그후에 i 를증가 를뜻함 17 18 -- 연산자도똑같은성질을갖음 : printf("i is %d\n", --i); /* prints "i is 0" */ printf("i is %d\n", i); /* prints "i is 0" */ printf("i is %d\n", i--); /* prints "i is 1" */ printf("i is %d\n", i); /* prints "i is 0" */ ++ 또는 가한표현식에서여러차례사용된다면그결과를판단하기어려워짐 j = 2; k = ++i + j++; 마지막문장은다음과같음 i = i + 1; k = i + j; j = j + 1; 최종결과로 i, j, k 는 2, 3, 4 가됨 19 20

표현식평가 다음의문장을실행시키면 j = 2; k = i++ + j++; i, j, k 는 2, 3, 3 이됨. 지금까지다룬연산자 : 우선순위 이름 기호 결합방향 1 increment (postfix) ++ left decrement (postfix) -- 2 increment (prefix) ++ right decrement (prefix) -- unary plus + unary minus - 3 multiplicative * / % left 4 additive + - left 5 assignment = *= /= %= += -= right 21 22 표현식평가 하위표현식의평가순서 괄호를써서표현식을묶는방식으로평가할수있음 가장높은우선순위의연산자를중심으로연산자와피연산자를괄호로묶음 a=b+=c++-d+--e/-f Precedence level a=b+=(c++)-d+--e/-f 1 a=b+=(c++)-d+(--e)/(-f) 2 a=b+=(c++)-d+((--e)/(-f)) 3 a=b+=(((c++)-d)+((--e)/(-f))) 4 (a=(b+=(((c++)-d)+((--e)/(-f))))) 5 i = 2; j = i * i++; j 의값이 4 라고생각하기쉬움. 하지만 j 는 6 일수도있음 : 1. 두번째피연산자가 (i 의원래값 ) 사용되고, i 가증가됨 2. 첫번째피연산자가 (i 의새로운값 ) 사용됨 3. i 의원래값과새로운값이곱해져 6 이됨. 23 24

Expression Statements C 에선모든표현식이문장이될수있음. ++i; i 가먼저증가되고, 그새로운값을읽었지만어디에쓰이진않음 side effect 가있는경우만표현식이문장으로서가치가있음 : /* useful */ i--; /* useful */ i * j - 1; /* not useful */ 25