일단 시작하는 IT개발 블로그
  • 3. 자료형.
    2022년 01월 25일 22시 21분 17초에 업로드 된 글입니다.
    작성자: sooooong_minseok

    비트(Bit) : 두 가지 중 한 가지 값을 저장할 수 있는 단위데이터 저장 단위

    바이트(Byte) : 8개의 비트로 구성된 저장 단위.

    2 X 2 X 2 X 2 X 2 X 2 X 2 X 2 X

    = 2^8 = 256 >>256가지 상황 중 하나를 표현 가능하다는 의미.

     

     

    1Byte >>x1024 1KByte >>x1024  1MByte >>x1024  1GByte >>x1024 1TByte

    4 Bytes = 32bits

     

    2^10=2X1024를 의미합니다.

    고로,

    2^32 = 2^2 x 2^10 x 2^10 x 2^10 = 4Gbytes

     

    필요한 만큼 나눠서 메모리를 사용한다!!!!

    256 = 1바이트는 0~255사이의 값을 저장할 수 있다. 

    -32비트, 64비트 운영체제

    32비트 운영체제 : 32비트 단위로 메모리를 처리한다. 32비트 4Gbyte 번지까지 주소를 메모리로 저장한다는 것을 의미.

    그 이상은 이용하지 못한다.

    //64비트 운영체제 : (64비트이면 8바이트 주소를 사용하기 때문에 많이 커집니다 ㅎ 2^4 x 2^10 x 2^10 x 2^10 x 2^10 x 2^10 x 2^10 = 16EB(엑사바이트)입니다. EB(엑사 바이트)는 GB(기가 바이트), TB(테라 바이트), PB(페타 바이트) 다음입니다.)

     


    부호 비트 양수와 음수를 구별하기 위한 비트

    2x 2x 2x 2x 2x 2x 2

    = 2^7 = 128

     

    양수의 표현 범위 : 0 ~ 127

    음수의 표현 범위 : -128 ~ -1

     

    부호의 개념을 가지는 1Byte(2^8)의 표현 범위 -128~0~127

     


    부호 비트 예제

    1 0 0 0 0 0 0

    부호가 있는 자료형 : -128

    부호가 없는 자료형 : 128

    1 1 1 1 1 1 1 1

    부호가 있는 자료형 : -1

    부호가 없는 자료형 : 255

     


     

    아스키코드

    아스키 코드 출처 - https://www.kanglab.com/ascii.htm

      십진법
    A ~ Z (대문자)  65 ~ 90
    a ~ z (소문자) 97 ~ 122
    0 ~ 9 (숫자) 48 ~ 57

    128~255까지 있음.

    이외 아스키코드 + 확장 아스키 코드 - https://www.ascii-code.com/

    Ascii.pdf
    0.06MB

     

     


    자료형은 왜 필요한가???
    자료형 (Date Type) 실제로 메모리를 사용하는 단위

    Built-in Data Type : 사용 빈도가 높은 자료형을 예약어로 제공

    User-defined Data Type : 사용자가 만들어서 사용할 수 있는 문법 제공


    정수형 자료형 : c언어 프로그램에서 정수 값을 메모리에 저장하기 위해 사용하는 자료형

    실수형 자료형 : c언어 프로그램에서 실수 값을 메모리에 저장하기 위해 사용하는 자료형


    정수를 표현하는 자료형 char(character)

    >>signed char : 부호가 있는 1바이트 저장공간 (1바이트 메모리)

    signed char temperature;
    temperature = -2;     //영하 2도를 temperature변수에 저장함

    *우리 주변에 있는 정보데이터를 어떤 크기에 담는 것이 적절한지 고민할 필요가 있다.

    위 '온도'는 '영상과 영상라는 범위'가 존재하기에 signed char로 정보를 담아도 된다.

     

    >>unsigned char : 부호가 없는 1바이트 저장공간 (0~255까지)

    unsigned char age;
    age = 52;   //나이 52살을 age변수에 저장함.

    위 나이는 0부터 200를 넘지 않음, 또한 - 가 존재하지 않음. 따라서 unsigned char에 정보를 담는다.


    c언어는 1Byte라 하지 않고 왜 char라 하는가??

    아스키코드란 문자를 숫자로 표현해서 나온다. 0~255까지 숫자가 문자로 모두 표현가능하다는 의미/

    1바이트 안에는 모든 문자가 들어갈 수 있다.

    char를 이용하면 1바이트 안에 모든 문자를 이용 가능하다는 점에서 char는 문자형을 쓰도록 만들기 위해서 이름을 character를 따서 char를 사용한다.

     

    But, 프로그래머들이 char타입에는 문자만 해야 한다고 생각하지만, 

    기온이나 나이와 같은 정보도 가능하다.! 작은 점수, 데이터의 숫자 입력도 가능하다!

    의도는 문자를 활용하는 자료형으로 쓰기 위해 char를 만들었다.


     

    >>signed short int : 부호가 있는 2바이트 저장 공간 (-32,768 ~ 32,767) integer정수

    signed short dday;
    dday = -20;    //D-day가 -20일 남았다고 dday변수에 저장함.

    1년 365일 > 10년 3650일 > 100년 36500일정도

    dday값을 정할 때 signed short를 사용하면 충분히 저장가능하다.

     

    >>unsigned short int : 부호가 없는 2바이트 저장공간 (0 ~ 65,535)

    unsigned short int seconds;
    seconds = 35000;    //3aks 5000초를 second 변수에 저장함.

    10시간 이내의 값을 초단위로 사용한다면 1시간 3600초 10시간 36000초는 signed short int 값을 초과!

    unsigned short int 는 65,535개의 숫자를 저장할 수 있다.

     

    >>signed long int : 부호가 있는 4바이트 저장 공간 (-2,147,483,648 ~ 2,147,483,647) -21억~ 21억정도

    signed long int money;
    money = 70000000;    //700만원을 money변수에 저장함

    돈을 버는 경우와 쓰는 경우를 음수와 양수 모두 사용했음.

    65,535이상의 범위이상을 넘어설 경우가 높다 그러므로 signed long int를 사용.

    >>unsigned long int : 부호가 없는 4바이트 저장공간 (0 ~ 4,294,967,295)

    unsigned long int time_seconds;
    //1970년 1월 1일부터 현재까지 시간을 초단위로 환산한 다음 time_seconds변수에 저장함.
    time_seconds = 145310624;

    이 이상의 범위도 존재함 short short / long long


    정수 자료형 표로 정리!(빨간 표시가 주로 사용되는 형태)

    자료형 크기 범위 생략
    char
    signed char
    1바이트, 8비트 -128 ~ 127 signed 생략가능
    unsigned char 0 ~ 255  
    short
    short int
    2바이트, 16비트 -32,768 ~ 32,767 int 생략가능
    unsigned short
    unsigned short int
    0 ~ 65,535 int 생략가능
    int
    signed int
    4바이트, 32비트 - 2,147,483,648 ~ 2,147,483,647  
    unsinged
    unsigned int 
    0 ~ 4,294,967,295 int 생략가능
    long
    long int
    signed long 
    signed long int
    - 2,147,483,648 ~ 2,147,483,647 int 생략가능
    unsigned long
    unsigned long int
    0 ~ 4,294,967,295 int 생략가능
    long long
    long long int
    signed long long
    signed long long int
    8바이트 64비트 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 int 생략가능
    unsigned long long
    unsigned long long int
    0 ~ 18,446,744,073,709,551,615 int 생략가능

    정수형 자료형 범위.

    내가 500~600이라는 값을 원한다면 어떤가요???
    unsigned short int이라고 생각할 수 있다.

    하지만 500을 뺀다면 unsigned char로도 충분할 수 있다. 그러면 메모리를 최적화하여 사용할 수 있다!
    2바이트 >> 1바이트 

     

    범위를 보고 어떤 자료형을 사용할지 고민하는 것이 더 발전적인 생각입니다!!!

     

    >> 크기가 표시된 정수 자료형도 있다!!! (https://dojang.io/mod/page/view.php?id=35)

    #include <stdio.h>
    #include <stdint.h>    // 크기별로 정수 자료형이 정의된 헤더 파일
    
    int main()
    {
        int8_t num1 = -128;                    // 8비트(1바이트) 크기의 부호 있는 정수형 변수 선언
        int16_t num2 = 32767;                  // 16비트(2바이트) 크기의 부호 있는 정수형 변수 선언 
        int32_t num3 = 2147483647;             // 32비트(4바이트) 크기의 부호 있는 정수형 변수 선언
        int64_t num4 = 9223372036854775807;    // 64비트(8바이트) 크기의 부호 있는 정수형 변수 선언
    
        // int8_t, int16_t, int32_t는 %d로 출력하고 int64_t는 %lld로 출력
        printf("%d %d %d %lld\n", num1, num2, num3, num4); // -128 32767 2147483647 9223372036854775807
    
        uint8_t num5 = 255;                      // 8비트(1바이트) 크기의 부호 없는 정수형 변수 선언
        uint16_t num6 = 65535;                   // 16비트(2바이트) 크기의 부호 없는 정수형 변수 선언
        uint32_t num7 = 4294967295;              // 32비트(4바이트) 크기의 부호 없는 정수형 변수 선언
        uint64_t num8 = 18446744073709551615;    // 64비트(8바이트) 크기의 부호 없는 정수형 변수 선언
    
        // uint8_t, uint16_t, uint32_t는 %u로 출력하고 uint64_t는 %llu로 출력
        printf("%u %u %u %llu\n", num5, num6, num7, num8); // 255 65535 4294967295 18446744073709551615
    
        return 0;
    }

     


    실수를 표현하는 자료형.

    부동소수점 : 실수를 표현할 때 소수점의 위치를 고정하지 않고, 소수점의 위치를 나타내는 수를 따로 작성하는 방식이 부동소수점(floating - point)표현방식이다.

    C언어는 실수를 저장하기 위해 4바이트와 8바이트 자료형을 제공한다.

    3.123567 x 10^2

     

    고정소수점

    일정한 위치에 소수점의 위치를 고정하여 숫자를 나열하는 방법

    53.8     >>>>   000538000

    123.45  >>>>   001234500

     

    >>따로 심화해서 알아보자 실수형 자료형!.

     

     

     

    실수의 처리는 보조 수치 처리가 따로 되기 떄문에 속도가 떨어집니다. 굉장히 많이

    가능한 실수를 피하는 것이 좋다!
    float   0.7 저장을 하면 0.69999fh 저장된다. 속도는 높지만 정확도가 떨어진다.

    double   을 사용하는 것이 정확도가 더 높다!

     

    댓글