adopted from KNK C Programming : A Modern Approach

Slides:



Advertisements
Similar presentations
Copyright © 2015 by CJ Advanced SCM Research Institute All Rights Reserved. 물류 기업의 일대일로 활용과 협력 어재혁 상무 CJ대한통운 종합물류연구원장.
Advertisements

1 평생교육실습 계획서 ㈜ 휴넷
- 1 - Copyright © by koscom All rights reserved Copyright © by koscom All rights reserved. CME 연계 CME 연계 글로벌시장 HTS 사용자를 위한 교육 자료.
Copyright © 2008 Wei Qi Xia. All rights reserved. 거시적 영향 발표자:하위기 2008 년 11 월 15 일.
1. 시설관리공단 상임이사 정수기준을 위반한 초과 여부에 대한 질의 2. 졸속사업으로 인한 예산낭비에 대한 질의 (KT 도로개설, 강변역 고구려역사 ]
III. 청년취업아카데미 소개. COPYRIGHT (C) 2011 LOTTE DATA COMMUNICATON COMPANY. ALL RIGHTS RESERVED. 2 실무 능력을 갖춘 우수한 IT 인력을 육성하여 협약기업에 추천하는 과정 추진 목적 교육을 통한 산업계.
인천대학교 취업경력개발원 셀프뷰를 활용한 모의면접 및 과제제출. CONTENTS Copyright (c) 2012 EnhanceU Ltd. All Rights Reserved I. 셀프뷰 소개 II. 웹캠 면접녹화 및 과제제출 III. 스마트폰 면접녹화 및 과제제출.
YES C 제 1 장 C 언어의 개요 1/34 제 1 장 C 언어의 개요 문봉근. YES C 제 1 장 C 언어의 개요 2/34 제 1 장 C 언어의 개요 1.1 프로그램과 C 언어의 특징 1.2 C 언어의 프로그램 구성 1.3 비주얼 C++ 통합 환경 들어가기.
2008 년 1 월 7 일 Firmdata System.CO.,LTD 펌데이터시스템 Firmdata 펌데이터 웹기획안 - 펌데이터 작성자 장광희.
1 Copyright © LG CNS CO. Ltd. 2007, All Rights Reserved. 안녕하십니까 ? 여러분의 곁을 지키는 건강보험 고객센터 입니다 자격 및 건강검진대상자 조회 및 의료급여서비스는 1 번 보험증 고지서 등 각종서식발급 요청은 2 번 민원처리.
1 Copyright ⓒ C.J. Yoon ALL RIGHTS RESERVED 제 III 부 생산능력.
Copyright 2009 ⓒ U-DAP All right Reserved 부부과정 일정표 (1 박 2 일 ) 시간 1 일차 2 일차 07:00~08:00 연수원 이동 및 등록 기상 및 아침식사 08:00~09:00 밀어주고 끌어주고 우리 부부의 신뢰지수는 ? 가정 속.
“방문을 열어보세요. 당신을 기다리고 있습니다.”
사회보험 징수통합 관련 조사 결과 보고서 한국갤럽조사연구소
로그인 1 케피코 회사 로고를 클릭합니다.
3주 강의 Lexical Elements, Operators, and the C System
제 1장 C 언어의 소개.
01. 강사 소개 강사 신지식인 선정 한국음식업 중앙회 전남지회 정책자문위원 내셔널 트러스트 문화유산 자문위원
제 7 장 문장 구조화 제어문 지정문 조건문 반복문 GOTO 문 비결정적문.
4장: 자료형과 수식.
프로그래밍언어론 2nd edition Tucker and Noonan
Korea Iron & Steel Association
Chapter 6 – 변수, 바인딩, 식 및 제어문 Outline 6.1 변수 6.2 바인딩 6.3 선언 6.4 배정문
Chapter 4 – 연 산 자 Outline 4.1 산술 연산자 4.2 관계 연산자 4.3 동등 연산자 4.4 논리 연산자
제2장 데이터 및 수식.
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
Chapter 3 Flow of Control
- 자료 활용 시 참고사항 - 1. 성희롱 교육은 매년 실시하여야 하므로 매우 식상
Copyright by All rights reserved.
4주차: Data Types and Functions
adopted from KNK C Programming : A Modern Approach
adopted from KNK C Programming : A Modern Approach
Arrays 요약.
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
Chapter 2 Lexical Elements, Operators, and the C System
제2장 데이터 및 수식.
Copyright 2011 ㈜굿애플 All rights reserved
27 세대 간의 갈등 사례 원인 해결 Example Cause Solution
Chapter 5 화폐의 시간가치 McGraw Hill/Irwin
산학협력단 연구지원금 시스템 사용자 매뉴얼 Copyrightⓒ2014 UOSICF. All Rights Reserved. 1.
과학 탐구 토론 대회 1학년 2반 박승원 1학년 5반 권민성.
11장 창업과 신생기업 관리 Technology and Management for Engineers
주의(主意) 본 자료는 고사성어100선의 교육자료 데모용입니다. 제품구입시 모든 교육용 자료는 별도로 무상 공급됩니다.
Formatted Input/Output
제 3 장 연산자 (Operators).
Introduction to Programming Language
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
RECRUITING INFORMATION
곤지암역세권 상업성 분석 인구환경(광주시 연도별 인구증가 현황)
프로그래밍언어론 2nd edition Tucker and Noonan
솔개의 교훈 _ 변화만이 살길이다 “변화” 하지 않는 자는 자연 도태됩니다. 과연 당신은 ……. 현재의 위치에 만족 한 상태로
제 3장 데이터형과 연산자 Hello!! C 언어 강성호 김학배 최우영.
루프와 카운트 Looping and counting
연산자Operators C언어의 기본 구조 도서출판 한산 C언어의 기본 구조 1: #include <stdio.h>
Part 06 세상을 변화시키는 연산자 안산1대학 디지털정보통신과 임 성 국.
WINIA e-PURCHASING SYSTEM Copyrightⓒ 2002 by MCC. All right reserved..
adopted from KNK C Programming : A Modern Approach
Chapter 06 연산자 기본.
하나투어샵 메인 부분 리뉴얼 - 디자인 하나샵 단독 물량 확보! 필리핀 직송 골드 망고 최저가 보장! 37,900원!
지역발전사업 예산 수요조사 계획(안).
원소재유상사급 시스템 사용자 메뉴얼 주식회사 경창
스케줄링 (Scheduling) 시스템 내부시간(time in the system): 스케줄링 문제
7장.창업세무.
Summary of Pointers and Arrays
Chapter 5 화폐의 시간가치 McGraw Hill/Irwin
Structures Summary.
WINIA e-PURCHASING SYSTEM Copyrightⓒ 2002 by MCC. All right reserved..
中国类型小说海外受追捧, 国内市场类型新作后继乏力
adopted from KNK C Programming : A Modern Approach
V. I. P 유년부 예배.
Presentation transcript:

adopted from KNK C Programming : A Modern Approach Expressions adopted from KNK C Programming : A Modern Approach

Copyright © 2008 W. W. Norton & Company. All rights reserved. Operators 연산자 C 는 표현식을 많이 사용함 표현식은 변수와 상수와 연산자로 구성됨 C 에는 연산자의 종류가 다양함 arithmetic operators (수식 연산자) relational operators (관계 연산자) logical operators (논리 연산자) assignment operators (할당 연산자) increment and decrement operators (증감 연산자) 그 외에도 더 있음 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Arithmetic Operators 수식 연산자 C 이항 수식 연산자 arithmetic operators: + addition - subtraction * multiplication / division % remainder 단항 수식 연산자: + unary plus - unary minus An operator is binary if it has two operands. Ex: A*B, A+B i = +1; j = -i; 음수 양수 구분용 Copyright © 2008 W. W. Norton & Company. All rights reserved.

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. Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. / 와 % 연산자 / 와 % 는 주의를 요하는 연산자: 두 피연산자가 정수면, / 소수점 이하는 버림. 1 / 2 의 결과는 0이다. 0.5가 아님. % 연산자는 정수만 피연산자로 받음; 어느 하나라도 정수가 아니면 컴파일이 안됨 우측 피연산자로 0을 쓸 경우 / 또는 % 는 정의되지 않은 동작을 함 / 과 % 에 음수 피연산자가 사용될 경우 C89의 경우 implementation- defined(구현에 따라 다름). C99에서는, 나눗셈의 결과는 항상 0 방향으로 내림, 그리고 i % j의 결과는 i의 부호와 같음. Copyright © 2008 W. W. Norton & Company. All rights reserved.

Operator Precedence (연산자 우선순위) i + j * k 의 의미가 “i 와 j를 더하고, 그 결과를 k로 곱하라” 일까 “j 와 k를 곱하고, i를 더하라”일까? 명확히 하는 방법은 (i + j) * k 또는 i + (j * k)처럼 괄호로 묶는 것. 괄호가 없으면, C 는 연산자 우선 순위 operator precedence 규칙에 따라 처리함 우선순위를 모를 때는 괄호를 써서 먼저 계산한 것을 표시! Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. Operator Precedence 수식 연산자의 우선 순위는 간략하게 다음과 같음: Highest: + - (unary) * / % Lowest: + - (binary)   Examples: i + j * k 와 i + (j * k)는 동치 -i * -j 와 (-i) * (-j) 는 동치 +i + j / k 와 (+i) + (j / k) 는 동치 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Operator Associativity (연산자 결합) 연산자들의 결합 방향이 왼쪽에서 오른쪽으로 진행된다면 left associative 왼쪽 결합 이항 수식 연산자 (*, /, %, +, -) 는 left associative i - j – k 와 (i - j) - k 는 동치 i * j / k 와 (i * j) / k 는 동치 연산의 결합 방향이 오른쪽에서 왼쪽이면 right associative 오른쪽 결합. 단항 수식 연산자 (+ , -) 는 right associative - + i 와 -(+i) 는 동치 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Assignment Operators 할당 연산자 Simple assignment 단순 할당: 변수에 값 저장에 사용 Compound assignment 합성 할당: 변수에 저장된 값을 갱신할 때 사용 Copyright © 2008 W. W. Norton & Company. All rights reserved.

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 */ Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. Side Effects 피연산자의 값을 변형시키는 연산자를 side effect가 있다고 함 단순 할당 연산자는 side effect가 있음: 좌변의 변수를 변경함 i = 0 를 분석해보면 우변의 결과는 0이 됨. 그리고 side effect로 인해 i에 0을 저장함. 할당은 연산자이기 때문에 여러 할당 연산이 한 줄에 사용될 수 있음: i = j = k = 0; = 는 오른쪽 결합이기 때문에 아래와 동치임 i = (j = (k = 0)); Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. Side Effects 그러나 한 줄에 할당을 여러 번 할 경우 값이 변환되는 경우를 주의해야 함: int i; float f; f = i = 33.3f; i 는 33를 저장, f는33.0 (not 33.3)을 저장. Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. Side Effects v = e 형태의 할당은 v의 타입이 허용되는 모든 경우에 대해 사용할 수 있음: i = 1; k = 1 + (j = i); // 수식 내에 할당을 포함할 경우 // 읽기 어렵고, 버그의 온상임 printf("%d %d %d\n", i, j, k); /* prints "1 1 2" */ Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. Lvalues 할당 연산자는 왼쪽 피연산자로 lvalue 를 필요로 함. lvalue 는 컴퓨터 메모리에 저장된 객체로서 상수도 계산 결과도 아님. 변수가 lvalues 임; 10 또는 2 * i 는 아님. 12 = i; /*** WRONG ***/ i + j = 0; /*** WRONG ***/ -i = j; /*** WRONG ***/ 컴파일러는 이런 경우 “invalid lvalue in assignment.”라는 오류 메시지를 출력함 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Compound Assignment 합성 할당 변수의 과거의 값을 사용하여 새로운 값을 다시 원래의 변수에 저장하는 경우는 매우 흔함 Example: i = i + 2; += 합성 할당 연산자로 간단하게 표현할 수 있음: i += 2; /* same as i = i + 2; */ Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 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와 동치가 아님 -= *= /= %= Copyright © 2008 W. W. Norton & Company. All rights reserved.

Increment and Decrement Operators 증감, 가감 연산자 변수에 가장 자주 사용되는 연산은 “증가” (더하기 1) 그리고 “가감” (빼기 1): C 는 이를 위해 ++ (증가) 그리고 -- (감소)연산자 제공. ++ 연산자는 피연산자에 1을 더하고, -- 연산자는 1을 뺌. prefix 연산자 (++i, –-i) 또는 postfix 연산자 (i++, i--). i += 1; j -= 1; i = i + 1; j = j - 1; 합성 할당 연산자 i++; ++i; j--; --i; 증가 감소 연산자 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Increment and Decrement Operators ++i (“먼저 더함”)는 i + 1 를 뜻하고 side effect로 i는 증가됨 i = 1; 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" */ ++i 는 “i 를 즉시 증가”를 뜻함 i++ 는 “현재의 i 값을 쓰고, 그 후에 i 를 증가”를 뜻함 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Increment and Decrement Operators -- 연산자도 똑같은 성질을 갖음: i = 1; 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" */ Copyright © 2008 W. W. Norton & Company. All rights reserved.

Increment and Decrement Operators ++ 또는 – 가 한 표현식에서 여러 차례 사용된다면 그 결과를 판단하기 어려워짐 Example: i = 1; j = 2; k = ++i + j++; 마지막 문장은 다음과 같음 i = i + 1; k = i + j; j = j + 1; 최종 결과로 i, j, k 는 2, 3, 4 가 됨 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Increment and Decrement Operators 다음의 문장을 실행 시키면 i = 1; j = 2; k = i++ + j++; i, j, k 는 2, 3, 3 이 됨. Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 표현식 평가 지금까지 다룬 연산자: 우선 순위 이름 기호 결합 방향 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 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 표현식 평가 괄호를 써서 표현식을 묶는 방식으로 평가할 수 있음 가장 높은 우선 순위의 연산자를 중심으로 연산자와 피연산자를 괄호로 묶음 Example: 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 Copyright © 2008 W. W. Norton & Company. All rights reserved.

Copyright © 2008 W. W. Norton & Company. All rights reserved. 하위표현식의 평가 순서 Example: i = 2; j = i * i++; j 의 값이 4라고 생각하기 쉬움. 하지만 j 는 6일 수도 있음: 두 번째 피연산자가 (i의 원래 값) 사용되고, i 가 증가됨 첫 번째 피연산자가 (i의 새로운 값) 사용됨 i의 원래 값과 새로운 값이 곱해져 6이 됨. Copyright © 2008 W. W. Norton & Company. All rights reserved. undefined behavior

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