2010-10-12

6. 델파이(delphi) - 자료형과 연산자

<자료형(data types)>


단순형
문자열형
구조형 
포인터형 
가변형 
정수형
문자형
대수형
열거형
범위형
실수형 
단문자열형
장문자열형
광포(Wide) 문자열형 
배열형
레코드형
집합형 
무형 포인터
유형 포인터
가변형 

1. 단순형

  1) 정수형(integer type)
   

 자료형
범위 
크기 
Shortint 
-128 ~ 127 
1바이트/부호있는 8비트
Smallint
-32768 ~ 32767 
2바이트/부호있는 16비트 
Longint
-2147483648 ~ 2147483647 
4바이트/부호있는 32비트 
Byte 
0 ~ 255 
1바이트/부호없는 8비트 
Word
0 ~ 65535 
2바이트/부호없는 16비트 
Integer 
-2147483648 ~ 2147483647
4바이트/부호있는 32비트
Cardinal 
0 ~ 21473647 
4바이트/부호없는 32비트

  2) 문자형(character type)
   

문자형
표현 범위 
AnsiChar 
1바이트 크기 또는 ASCII 코드 값에 해당하는 문자 
WideChar 
2바이트 크기 또는 유니코드(Unicode) 값에 해당하는 문자 
Char 
AnsiChar 형과 같음 
      
  3) 대수형(boolean type)
    

 대수형
크기 및 표현 범위 
ByteBool 
1 바이트의 True/False 
WordBool 
2 바이트의 True/False 
LongBool 
4 바이트의 True/False 
Boolean 
ByteBool과 같음 
 
  4) 열거형(enumerated type) - 몇 개의 항목들을 나열하고 그 순서를 값으로 가질 수 있는 자료형
   앞의 자료형들은 값의 범위가 컴파일러에 의해서 정해지지만, 열거형이나 몇몇 자료형들은 사용자가 값의 범위를 정할수 있으므로 사용자 정의형이라고도 함

  *. 사용자 정의형은 type 절에 정의해야 합니다.
  

  *. 열거형 변수를 선언할 때 나열된 값들은 해당 열거형 변수에 대해서만 일종의 상수로 취급합니다.
     예를 들어, 앞의 열거형 변수에서 사용된 Red를 새로운 변수 이름으로 선언할 수 없습니다.
   
  5) 범위형(subrange type) - 단순형들 중에서 특정 자료형이 표현할 수 있는 범위의 일부만을 범위로 가지는 자료형입니다.
      범위형도 열거형과 마찬가지로 사용자가 범위를 지정할 수 있으므로 사용자 정의 자료형입니다.
     
  6) 순서형(ordinal type) - 지금까지 설명했던 단순형들은 변수에 대입 할수 있는 값의 순서가 정해져 있으므로 순서형 이라고도 합니다.
      순서형에서는 특별한 연산이 가능합니다. 어떤 값보다 바로 앞에 있거나 뒤에 있는 구하는 연산인 경우에는 Pred와 Succ를 사용하고,
      어떤 값이 처음부터 몇번 째 위치에 있는지 알아내는 연산인 경우에는 Ord를 사용합니다.
   
  7) 실수형(real type)
   

실수형 
범위 
크기 
Real 
2.9 * e-39 ~ 17 * e38 
6 바이트 
Single 
1.5 * e-45 ~ 3.4 * e38
4 바이트
Double 
5.0 * e-324 ~ 1.7 * e308 
8 바이트
Extended 
3.4 * e-3942 ~ 1.1 * e4932 
10 바이트
Comp 
-263 ~ 263 -1
8 바이트
Currency 
-922337293685477.5808
~922337293685477.5807 
8 바이트

2. 문자열형(string type)
 
문자열 형 
설명 
ShortString 
최대 255자 길이의 문자열을 가질 수 있습니다. 
AnsiString 
임의의 길이의 ASCII 문자열을 가질 수 있습니다. 
WideString 
임의의 길이의 유니코드(Unicode) 문자열을 가질 수 있습니다. 
String 
컴파일러 지시자에 따라 ShortString 이나 AnsiString이 됩니다.
{$H+}가 사용된 경우에는 AnsiString이 되고(기본값),
{$H-}가 사용된 경우에는 ShortString이 됩니다. 

3. 구조형(structured type)
  1) 배열형(array type) - 동일한 자료형의 값들을 여러개 저장하는데 사용
    ex1>
      var
        A : array[1..10] of Integer;
        A[1] := 100;
    ex2> 범위형
      type
        SI = 1..10;
      var
        AA : array[SI] of Integer;
    ex3> 열거형
      var
        CA : array[Colors] of Integer;
        CA2 : array[Red..Blue] of Integer;
        // 이 배열 사용시 아래와 같이 해야합니다.
        CA[Red] := 1;
        CA2[Blue] := 10;
    ex4> 배열을 가지는 배열(다차원 배열)
     var
        AA : array[1..10] of array[Boolean] of Integer;
        AA[1, false] := 1;
     // 위와 같은 선언
     var
        A : array[1..10, Boolean] of Integer;

  2) 레코드형(record type) - 다른 자료형의 여러 데이터를 다루기 위해서 정의, C언어의 구조체와 비슷

  ex1>
      type
        Cities = (Seoul, Incheon, Pusan, Jinju);
        AddrInfo = record;
          Name : String;
          Sex : Char;
          City : Cities;
          Post1 : Shortint;
          Post2 : Shortint;
        end;
  ex2>
     var
       MyAddr : AddrInfo;
       ...
       MyAddr.Name := '철수';
       MyAddr.Sex := 'M';
       MyAddr.City := Seoul;
       MyAddr.Post1 := 100;
       MyAddr.Post2 := 200;
  ex3>
    var
      MyAddr : AddrInfo;
      ...
      with MyAddr do begin // begin 과 end 사이에는 MyAddr. 생략 가능
         Name := '영희';
         Sex := 'F';
         City := Pusan;
         Post1 := 100;
         Post2 := 200;
      end;     
  
  3) 집합형(set type) - 수학에서 말하는 흔히 사용되는 집합을 표현하는데 사용되는 것
    ex1>
      var
        CharSet : Set of Char;
        //  아래와 같이 표현
        CharSet := ['a', 'c', 'f'];

4. 포인터형(pointer type) - 어떤 대상을 가리키는 값을 표현하는 자료형
  일반적으로, 변수는 메모리라는 기억장소에 저장되고 포인터형 변수는 변수가 저장된 메모리 영역을 가리킵니다.
  그래서, 포인터형 변수는 일정한 범위의 값이 아니라, 변수가 저장된 메모리 영역의 주소를 값으로 가지게 됩니다.
 
  포인터(포인터형 변수)가 메모리의 유효한(사용가능한) 영역을 가리키게 하는 방법 2가지
    1) 실제로 선언된 변수의 주소를 포인터에 대입한다. - 간접 어드레싱(indirect addressing)
    2) 시스템에서 어떤 메모리 영역을 할당(allocate) 받은 후, 포인터가 그 영역을 가리키게 한다. - 동적 변수(dynamic variable)
 
  오브젝트 파스칼에서의 포인터 선언 하는 방법
    1) 무형 포인터 - Pointer 예약어 사용
      ex>
        var
          P : Pointer;

    2) 유형 포인터 - ^ 기호를 붙여서 사용
      ex1>
        var
          PI : ^Integer;
     
      ex2>
        type
          PInteger = ^Integer;
        ...
        var
          PI : PInteger;

*. 기본 자료형에 대한 유형 포인터의 예 - 널 종료 문자열(null terminated string) - c/c++에서는 \0, 오브젝트 파스칼에서는 NIL
 - 널종료문자열을 사용하려면 반드시 초기화 과정을 거쳥 한다.
    널종료문자열에 필요한 메모리를 할당 받거나 또는 널 종료 문자열이 다른 유효한 문자열이나 배열을 가리키게 해야합니다.

선언된 포인터형 
의미 
PChar  ^AnsiChar
PAnsiChar ^AnsiChar
PAnsiString  ^AnsiString
PShortString  ^ShortString 

    ex>
      var
        PI : PInteger;
        I : Integer;
        ...
        I := PI^;          // PI가 가리키는 값을 I에 대입한다.


5. 가변형(variant type) - 실행시 임의의 자료형을 포함할 수 있는 자료형,
  주로, OLE 기능 구현에 중요한 역할을 함
  ex>
    var
      V : Variant;

■ 형변환(casting) - 서로 다른 형의 변수를 대입하기 위해 하는 변환
  ex>
    I : Integer;
   C : Char;

   I := Integer(C);

<연산자(operators)와 수식>

1. 산술(arithmetic) 연산자 - 일반적인 산술 연산


연산자(operator)
연산(operation) 
피연산자(operand)
용례 
덧셈  정수형/실수형  5+5(=10), 1+1.1(=2.1)
뺄셈  정수형/실수형  10-3(=7), 100-11.1(=88.9) 
곱셈  정수형/실수형  10*10(=100), 5.5*1.1(=6.05) 
나눗셈  정수형/실수형  15/4(=3.75), 16/2.5(=6.4)
div  정수형 나눗셈  정수형  15 div 4(=3) 
mod  나머지  정수형  15 mod 4(=3) 

2. 논리(logical) 연산자 - 다양한 논리 연산을 위해 제공


연산자
연산 
피연산자
용례 
and  논리적 AND  정수형  123 and 11(=11) 
or  논리적 OR  정수형  123 or 11(=123) 
not  논리적 NOT  정수형 not o(=$ffffffff) 
xor  논리적 XOR  정수형 123 xor 11(=112) 
shl  비트를 좌측으로 이동  정수형 $ffff shl 4(=$fff0) 
shr  비트를 우측으로 이동  정수형  $ffff shr 4(=$0fff) 

3. 대수(boolean) 연산자  - 대수형에 대해 수행할수 있는 연산자


연산자
연산
피연산자
용례 
and  논리적 and  대수형  false and true(= false) 
or  논리적 or  대수형  false or true(=true) 
not  부정  대수형  not false(=true) 
xor  논리적 xor  대수형  false xor true(=true) 

4. 관계(relation) 연산자 - 비교 연산시 사용되는 연산자


연산자
연산 
피연산자
용례 
동일하다 비교가능한 형(단순형등) A = B 
<>  다르다  비교가능한 형(단순형등)  A <> B 
보다 크다  비교가능한 형(단순형등)  A > B
보다 작다  비교가능한 형(단순형등)  A < B 
<=  보다 같거나 크다  비교가능한 형(단순형등) A <= B 
<=  부분집합이다 집합형 A <= B 
=>  보다 작거나 크다  비교가능한 형(단순형등)  A >= B 
=>  수퍼셋이다  집합형  A >= B 
in  에 속해있다  집합형(연산자 우측)과
그 원소(연산자 좌측) 
'a' in S 

5. 문자열 연산자


연산자
연산 
피연산자 
용례 
접합 
문자열형 
'ABC'+'DEF'(='ABCDEF') 

6. 집합 연산자 - 일반적인 집합의 연산을 수행


연산자
연산 
피연산자
용례 
합집합 
집합형 
A+B(=A와 B의 합집합) 
차집합 
집합형 
A-B(=A의 B에 대한 합집합) 
교집합 
집합형 
A*B(=A와 B의 교집합) 

7. 포인터 연산자


연산자 연산  피연산자 용례 
변수의 주소를 돌려 줍니다  임의의 자료형  @A(=A의 주소) 
포인터에 다른 값을 더합니다 문자형 포인터  P+I(=P에 I를 더함) 
포인터로부터의 다른 값 만큼 뺍니다  문자형 포인터  P-I(=P에서 I를 뺌) 

ex>
  var
    P, PP : PChar;
    C, CC : Char;
    ...
    C := 'A';
    P := @C;
    PP := @CC;
    PP^ := P^;          // PP^와 P^, 그리고 CC는 'A'입니다.

댓글 없음:

댓글 쓰기

Delphi : DateUtils.pas 날짜함수 정리

http://www.delmadang.com/community/bbs_view.asp?bbsNo=21&bbsCat=0&indx=209893&page=41 델파이에 날짜함수를 모아둔 DateUtils.pas 가 있습니다. ...