자료구조

[자료구조] 03 자료형

juju824 2020. 9. 17. 00:07

✔️ c 언어에서 지원하는 자료형의 크기를 확인해보자!

 

#include <stdio.h>

void main(){
    printf("char = %d\n", sizeof(char));
    printf("short = %d\n", sizeof(short));
    printf("int = %d\n", sizeof(int));
    printf("long = %d\n", sizeof(long));
    printf("float = %d\n", sizeof(float));
    printf("double = %d\n", sizeof(double));
    printf("long double = %d\n", sizeof(long double));
    printf("int* = %d\n", sizeof(int*));
    printf("double* = %d\n", sizeof(double*));
}
//cmd+shift+b => 단축키

 

output

 

에휴 너무 오랜만에 c를 했더니 셋팅부터 처음부터 다하느라 고생좀 했다 ,,,

 

👉 결과를 보면 문자형은 1바이트, 정수와 실수는 4바이트, double과 long은 8바이트 

 

 

 

 

✔️팩토리얼 코딩을 통해 좀 더 자세히 살펴보자!

 

//팩토리얼 계산

#include <stdio.h>
void factorial (int n); 

void main() 
{
    factorial(20);
}

void factorial (int n){
    int i, j;
    int total;

    for (i=2; i<=n; i++){
        total=1;
        for (j=2; j<=i; j++){
            total = total * j;
        }
        printf("%d! = %d\n", i, total); 
    }
}
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184
17! = -288522240
18! = -898433024
19! = 109641728
20! = -2102132736

❓코드를 짜고 결과를 확인해보면 13!부터는 결과값이 좀 이상하다 ❓

total이 int 형이라 최대 4바이트까지 가능 

4바이트 = 32비트 = 2,147,483,647  ==> 값의 범위 : -2147483648 ~ 2147483647

1바이트 = 8비트 = 2^8 = 256 ==> 값의 범위 : -128 ~ 127

13 이후부터는 팩토리얼 값이 Overflow 된 것이다. 이럴 땐 다른 자료형 사용해줘라!

 

 

✔️추상자료형 (Abstract data type , ADT) 이 뭘까

 

모든 자료가 char, int, float의 형태로 표현되는 건 아니다 

학생이 교과목을 수강하거나 시험을 보거나 학점을 받는 상황에서는 

학생과 교과목은 다양한 속성을 가진 객체로 표현되어야 하고

시험을 보고 학점을 받는 일은 행위로 표현되어야 한다 

 

추상자료형 : 기본 자료형 외에 새로운 객체의 속성 (property) 과 연산자 (operation)을 정의하여 사용할 수 있도록 해주는 것

//은행 계좌를 추상 자료형으로 선언한 예

class bankaccount{
    //아래 네가지는 계좌객체의 속성 (property)
    int account_id;
    int account_type;
    char owner_name[20];
    float balance = 0;

    deposit(amount)//입금 : 이 객체의 연산자 (operation, behavior)
    {
        balance = balance+amount;
    }
    withdraw(amount)//출금 : 이 객체의 연산자
    {
        balance = balance-amount;
    }
    init(name, type, money)
    //객체를 생성하는 연산자, 인자들로 객체 속성값 초기화
    //이 추상 자료형을 이용하여 myaccount라는 객체가 초기값으로 생성된다
    {
        owner_name = name;
        account_type = type;
        deposit(money);
    }
}

BankAccount myaccount("Lee", "checking", "100000");