Programming Languages Type Conversion Classifying Type Conversions According to the notation –Implicit Conversions (coercion) –Explicit Conversions (casting)

Slides:



Advertisements
Similar presentations
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
Advertisements

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++ 통합 환경 들어가기.
Copyright © 2006 The McGraw-Hill Companies, Inc. 프로그래밍 언어론 2nd edition Tucker and Noonan 5 장 타입 “ 타입은 컴퓨터 프로그래밍의 효소이다 ; 프로그래밍은 타입을 통해 소화할만한 것이 된다.” 로빈.
제 4 장 변수, 영역, 수명 변수 바인딩 영역 기억장소 할당과 수명 변수와 그 환경 변수 초기화 상수와 변수.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
보호구는 왜 착용하여야 하는가? 유해요인(가스,분진,소음) 위험요인(추락,낙하,비래,충돌 등) 근본적인 안전대책 강구
제 11 장 구조체.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
쉽게 풀어쓴 C언어 Express 제5장 수식과 연산자 C Express Slide 1 (of 34)
제 1장 C 언어의 소개.
Internet Computing KUT Youn-Hee Han
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
C로 쉽게 풀어쓴 자료구조 © Copyright 생능출판사 2005
제 2 장 배열과 스트링.
제 6 장 데이터 타입 6.1 데이터 타입 및 타입 정보 6.2 타입의 용도 6.3 타입 구성자 6.4 사례 연구
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
Chapter 7 – 자료형 Outline 7.1 자료형과 형 선언 7.2 단순형 7.3 열거형 7.4 배열
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Kasimov C언어 세미나 1st.
Chapter 03 배열, 구조체, 포인터.
자료 구조: Chapter 3 배열(1) 순천향대학교 컴퓨터공학과 하 상 호.
자료 구조: Chapter 3 배열(1) 순천향대학교 컴퓨터공학과 하 상 호.
바인딩, 메모리 관리 SANGJI University Kwangman Ko
CHAP 3:배열, 구조체, 포인터.
자료 구조: Chapter 3 (2)구조체, 포인터
Chapter 9 – 부 프로그램 Outline 9.1 개요 9.2 매개변수 평가와 전달기법 9.3 형식 매개변수 명세
Ch2-2. VHDL Basic VHDL lexical element VHDL description
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
프로그래밍 서울대학교 통계학과 2009년 2학기 컴퓨터의 개념 및 실습 (
제2장 데이터 및 수식.
제 2 장 변수와 상수.
제 3 장 상수와 변수
5장. 상수와 기본 자료형. 5장. 상수와 기본 자료형 5-1 C 언어가 제공하는 기본 자료형 자료형(data type) 기본 자료형 사용자 정의 자료형 int val; "선언할 변수의 특징을 나타내기 위한 키워드" 기본 자료형 기본적으로 제공이 되는 자료형 사용자.
우리생활속의 확률 이용사례탐구 한림초등학교영재학급 6학년 김수민.
Derived Types-- Enumerated, Structure and Union
adopted from KNK C Programming : A Modern Approach
13. 포인터와 배열! 함께 이해하기.
Arrays 요약.
제2장 데이터 및 수식.
3. 게이트레벨 최소화.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
Formatted Input/Output
Introduction to Programming Language
Java의 정석 제 2 장 변수(Variable) Java 정석 남궁성 강의
6장 데이터 타입(2) 순천향대학교 컴퓨터공학부 하 상 호.
프로그래밍 원리 Chapter 04 자료 처리와 연산자 신한대학교 IT융합공학부 박 호 균.
4장 - PHP의 표현식과 흐름 제어-.
Signature, Strong Typing
Chapter 04 자료 유형.
컴퓨터 프로그램 제2,3장 간단한 C 프로그램 김 문 기.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1.
Chapter 4 변수 및 바인딩.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
Part 06 세상을 변화시키는 연산자 안산1대학 디지털정보통신과 임 성 국.
Signature, Strong Typing
Signature, Strong Typing
자료구조 (Data Structure).
Chapter 13 – 객체 지향 프로그래밍 Outline 13.1 소프트웨어의 재사용과 독립성
이산수학(Discrete Mathematics)
자바 5.0 프로그래밍.
Signature, Strong Typing
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
Structures Summary.
엔화 대환/대출 자금용도 대상 이자 차액 효과 (A,B,C) 환율 리스크 헷징 (A,B) 엔화의 평균환율 (A,B,C)
Signature, Strong Typing
Signature, Strong Typing
Scalar and composite data
C++ 언어의 특징
Presentation transcript:

Programming Languages Type Conversion Classifying Type Conversions According to the notation –Implicit Conversions (coercion) –Explicit Conversions (casting) According to the sizes of the types involved –Widening Conversions –Narrowing Conversions: may involve a loss of data C Example int x = 5; x = x / 2; int double promotion (widening) int double assignment conversion (narrowing)

Programming Languages Notes on Type Conversions Advantages of Explicit Conversions Type conversions are documented precisely. Make it easier for the translator to resolve overloading. double max(int, double); // max #1 double max(double, int); // max #2... max(2, 3); // calls what? max(2, (double)3); // calls max #1 Structure Casting The sizes of the structure types should be identical. The translation merely reinterprets the memory

Programming Languages 1.Pascal 구문으로 된 자료형과 변수 선언이 다음과 같이 주어졌다. type range = ; table1 = array[range] of char ; table2 = table1 ; var x, y : array[-5..5] of char ; z : table1 ; w: table2 ; i: range ; j: ; (a) 구조적 동치, (b) 이름 동치, (c) 선언동치 하에서 어느 변수들이 형 동등한지와 그 이유를 기술하시오. 주어진 정보만으로는 모호한 경우를 확실히 구별하도록 하시오.

Programming Languages (a) i, j 는 모두 구조가 이므로 구조적 동치이다. x, y, z, w 는 그 구조가 모두 array[range] of char 로 동일 하므로 구조적 동치이다. (b) x 와 y 는 함께 선언되었으므로 이름동치이다. (c) table2 는 table1 로 선언 되었으므로 이 둘의 형을 가진 변수 z, w 는 선언 동치이다. 이름동치를 포함하므로 x 와 y 도 선언동치

Programming Languages 15) 타입의 동등성을 올바르게 설명한 것은 ? A:arrary(1..5) of INTEGER B:arrary(1..5) of INTEGER C, D:arrary(1..10) of INTEGER

Programming Languages A, B: 구조적 동치 C, D : 구조적 동치, 이름 동치, 선언동치 306p 15 문제는 이름 동치에 올바른 지문을 찾는 문제입니다. 배열형으로 선언하였으므로 모두 동치라고 볼수 없습니다. 배열선언시 동일한 명칭으로 동일한 위치에 선언하였을 경우를 동치라고 볼 수 있습니다. 배열 선언 시 A, B 는 함께 선언하지는 않았지만, 구성요소가 모든 측면에서 같기 때문에 구조적 동치라고 볼 수 있고, C,D 는 함께 선언되었으므로 구조적동치이면서 이름동치에 해당합니다. 선언 동치 (declaration equivalence) 는 재 선언을 통하여 원래의 구조를 그대로 사용하는 경우 원 자료형과 동일형으로 인식합니다.

Programming Languages type xy = record x: integer; y: real; end; xy_alias = xy; ab = record a: integer; b: real; end; yx = record y: real; x: integer; end; abc = record a: integer; b: real; c: real; end; intrec = record x: integer; end; iarr = array[1..10] of integer; iare = array[2..11] of integer; var rec1: xy; rec2: xy_alias; rec3: ab; rec4: abc; rec5,rec6: record a: integer; b: real; end; rec7: record a: integer; b: real; end; rec8: yx; rec9: intrec; rec10: xy; arr1: iarr; arr2: iare; arr3,arr4: array[1..10] of integer; arr5: array[1..10] of integer;

Programming Languages In structural equivalence, two types are equivalent if they have the same structure. rec1 and rec3 are structurally equivalent as they are both pairs of (integer,real). rec1 and rec8 are not structurally equivalent, as they order their elements differently. In name equivalence, two types are equivalent if they are named and have the same name. rec1 and rec2 are not name equivalent. rec1 and rec10 are name equivalent. In declaration equivalence, two types are equivalent if they lead back to the same type name. rec1 and rec2 are name equivalent. rec1 and rec10 are name equivalent.

Programming Languages Type Equivalence TYPE T1 = ARRAY [0..10] OF CHAR; TYPE T2 = T1; A : T2; B : T1; C, D: ARRAY [0..10] OF CHAR; E : T2;

Programming Languages Type Equivalence (a) Structural equivalence? 구조동치 A=B=C=D=E A,B,C,D and E all have equivalent type. (b) Strict name equivalence? 이름동치 A=E, C=D Type T2 is distinct from type T1, so C and D have equivalent type, A and E have equivalent type (but C,D have incompatible type with A,B,E) (c) Loose name equivalence? 선언동치 A=B=E, C=D Type T2 is the same as type T1, so A, B, E have equivalent type, and C,D have equivalent type, (but C,D have incompatible type with A,B,E) TYPE T1 = ARRAY [0..10] OF CHAR; TYPE T2 = T1; //aliased type here A : T2; B : T1; C, D: ARRAY [0..10] OF CHAR; E : T2;

Programming Languages Structural Equivalence Check representing types as trees Check equivalence recursively on subtrees Consider … 구조적 동치가 아님 Type array1 = array[-1..9] of integer; array2 = array[0..10] of integer;

Programming Languages Name equivalence … v1: ar1; v2: ar1; v3: ar2; v1 v2 v3 이름 동치 v4: array (INTEGER range ) of INTEGER; v5: array (INTEGER range ) of INTEGER; v4 and v5 이름 동치가 아님 v6,v7: array (INTEGER range ) of INTEGER; v6 v7 이름 동치

Programming Languages Declaration Equivalent Lead back to the same original structure declaration via a series of redeclarations type t1 = array [1..10] of integer; t2 = t1; t3 = t2; T1 t2 t3 선언동치 type t4 = array [1..10] of integer; t5 = array [1..10] of integer; T4 t5 선언동치 아님

Programming Languages Type Equivalence Structural Equivalence Two types are equivalent when they have the same structure. The same structure means the same type constructor and the same component types. Name Equivalence Two types are equivalent only if they have the same name. Declaration Equivalence Two types are equivalent if they are derived from the same name.

Programming Languages struct A {int a; float b;} a; struct B {int c; float d;} b; typedef struct A C; C c,c1;

Programming Languages struct A {int a; float b;} a; struct B {int c; float d;} b; typedef struct A C; C c,c1; struct.equiv. decl.equiv. name equiv. a = b; ok error error a = c; ok ok error c = c1; ok ok ok