Coding/C

[C언어] 정수 자료형, 실수 자료형 - 코딩도장

GunP4ng 2023. 11. 29. 23:40

[코딩도장] Unit 7 정수 자료형 사용하기


1. 정수 자료형

1.부호 있는 정수

C언어에서 정수 자료형은 크게 int, char 가 있다

부호 키워드(signed, unsigned)와 크기(long, short)를

붙여서 특성을 정의할 수 있다

  • signed : 부호 있는 정수를 표현. 보통 signed 키워드는 생략
  • unsigned : 부호 없는 정수를 표현. 값은 0부터 시작

정수 자료형의 크기 & 범위

 

printf 함수에서 charshortint는 서식지정자 %d 를 사용한다

long 은 %ld 를 사용한다

long long 은 %lld 를 사용한다


2. 부호 없는 정수

자료형 앞에 unsigned 를 붙여서 선언한다

unsigned char num1 = 200;
unsigned short num2 = 60000;
unsigned int num3 = 4123456789;
unsigned long num4 = 4123456789;
unsigned long long num5 = 12345678901234567890;

 

printf 함수에서 unsigned char, unsigned short, unsigned int 는 서식지정자 %u 를 사용한다 

long 은 %lu 를 사용한다 

long long 은 %llu 를 사용한다

 


3. 자료형 크기 구하기

자료형(타입)의 크기를 바이트(byte)로 구하기 위해서는 sizeof 함수를 이용해야 한다

sizeof 함수는 다음과 같이 사용한다

  • sizeof 표현식
  • sizeof(자료형)
  • sizeof(표현식)

※ sizeof int 와 같은 형식으로는 자료형의 크기를 구할 수 없다


4. 최솟값과 최댓값 표현

정수의 최솟값을 표현하려면 limits.h 헤더 파일을 사용해야 한다

limits.h 헤더 파일에는 최댓값과 최솟값이 정의되어 있다

#include <limits.h>

 

정수 자료형의 최솟값 & 최댓값


5. 크기가 표시된 정수 자료형

C99 표준부터는 stdint.h 헤더 파일을 사용하면 크기가 표시된 정수 자료형을 사용할 수 있다

#include <stdint.h>

int8_t num1 = -128;
int16_t num2 = 32767;
int32_t num3 = 2147483647;
int64_t num4 = 9223372036854775807;

 

부호 없는 정수 자료형은 앞에 u를 붙여서 uint8_tuint16_tuint32_tuint64_t 로 정의한다

 

파일 압축 및 암호화, 네트워크 프로그래밍을 할 때 유용하게 사용한다

stdint의 최소, 최댓값은 stdint.h 헤더 파일 안에 정의되어 있어서 limits.h 헤더 파일을 사용하지 않아도 된다


2. 심사문제

7.11 정수형 변수 선언과 오버플로우

다음 소스 코드를 완성하여 0 0 -128이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h> 

int main()
{
    ____________________
    ____________________
    ____________________
 
    num1 = 65536;
    num2 = 4294967296;
    num3 = 128;
 
    printf("%u %u %d\n", num1, num2, num3);
 
    return 0;
}

 

정답

unsigned short num1;
unsigned int num2;
char num3;

 

 

65536 을 입력했을 때 0 이 출력되려면

65535 가 최댓값인 unsigned short 를 사용해야 한다

최댓값 + 1 값을 출력해 오버플로우를 발생시켜 0을 출력한다

 

4294967296 를 입력했을 때 0이 출력되려면

4294967295 가 최댓값인 unsigned int 를 사용해야 한다

최댓값 + 1 값을 출력해 오버플로우를 발생시켜 0을 출력한다

 

128 을 입력했을 때 0이 출력되려면

127 이 최댓값인 char 를 사용해야 한다

최댓값 + 1 값을 출력해 오버플로우를 발생시켜 -128을 출력한다


7.12 자료형 크기 구하기

다음 소스 코드를 완성하여 11이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
 
int main()
{
    _______________
    _______________
 
    printf("%d\n", sizeof(num1) + sizeof(num2) + sizeof(long long));
 
    return 0;
}

 

정답

char num1;
short num2;

 

long long 자료형의 크기는 8byte

char 는 1byte

short 는 2byte 

 

num1 을 char 로 선언하고

num2 를 short 로 선언하면 출력값이 11 이 나오게 된다


7.13 최솟값 표현하기

다음 소스 코드를 완성하여 -128 0 -2147483648 0 -9223372036854775808가 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
__________________

int main()
{
    char num1 = CHAR_MIN;
    unsigned short num2 = 0;
    int num3 = INT_MIN;
    unsigned long num4 = 0;
    long long num5 = LLONG_MIN;
 
    printf("%d %u %d %lu %lld\n", num1, num2, num3, num4, num5);
 
    return 0;
}

 

정답

#include <limits.h>

 

CHAR_MIN, INT_MIN 등의 최솟값은 

limits.h 헤더 파일에 정의되어 있다


7.14 크기가 표시된 정수 자료형 사용하기

다음 소스 코드를 완성하여 -128 65535 0 9223372036854775807가 출력되게 만드세요..

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
__________________

int main()
{
    int8_t num1 = INT8_MIN;
    uint16_t num2 = UINT16_MAX;
    uint32_t num3 = 0;
    int64_t num4 = INT64_MAX;
 
    printf("%d %u %u %lld\n", num1, num2, num3, num4);
 
    return 0;
}

 

정답

#include <stdint.h>

 

INT8_MIN, UINT16_MAX 같이 크기가 표시된 자료형은 

stdint.h 헤더 파일에 정의되어 있다

 

 

[코딩도장] Unit 8 실수 자료형 사용하기


1. 실수 자료형

1. 실수 자료형

C언어에서 실수 자료형은

float, double, long double 이 있다

실수 자료형의 크기 & 범위

 

float num1 = 0.1f;
double num2 = 3867.215820;
long double num3 = 9.327513l;

 

float 은 숫자 뒤에 f, F 를 붙인다

double 은 아무것도 붙이지 않는다

long double 은 l, L 을 붙인다

 

pritnf로 float, double 을 출력할 때는 %f 를 사용하고

long double 을 출력할 때는 %Lf 를 사용한다

 

지수 표기법으로 출력 할때는

float, double 은 %e 를 사용하고

long double 은 %Le 를 사용한다

 

자료형의 크기는

float 은 4바이트

double, long double 은 8바이트이다

 

C언어 컴파일러는 기본적으로 실수를 소수점 6자리까지 출력한다

실수형은 double 을 기본으로 사용한다

( 컴파일러는 기본적으로 실수형을 double 로 인식)


2. 최솟값과 최댓값 표현

실수의 최솟값을 표현하려면 float.h 헤더 파일을 사용해야 한다

float.h 헤더 파일에는 최댓값과 최솟값이 정의되어 있다

#include <flaot.h>

 

실수 자료형의 최댓값 최솟값

 


3. 오버플로우와 언더플로우

FLT_MIN을 100000000.0과 같이 큰 수로 나누면 언더플로우가 발생한다

C언어에서는 실수 언더플로우를 0 또는 쓰레기 값으로 처리한다

 

FLT_MAX에 1000.0을 곱하면 오버플로우가 발생한다

정수와 달리 실수 오버플로우를 최솟값이 아닌 무한대(infinity)가 되므로 inf 를 출력한다


2. 심사문제

8.10 실수형 변수 선언과 자료형 크기 구하기

다음 소스 코드를 완성하여 1.800000 2.900000 3.700000 4 8이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
 
int main()
{
    ______________________
    ______________________
    long double num3 = 3.7l;
 
    printf("%f %f %Lf\n", num1, num2, num3);
    printf("%d %d\n", sizeof(num1), sizeof(num2));
 
    return 0;
}

 

정답

float num1 = 1.8;
double num2 = 2.9;

 

float 은 4 바이트

double 은 8 바이트 크기이다

 

float, double 은 %f 를 사용하여 출력한다


8.11 최솟값과 최댓값 표현하기

다음 소스 코드를 완성하여 각 실수 자료형의 최솟값과 최댓값이 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
#include <float.h>

int main()
{
    double doubleMin;
    double doubleMax;
    long double longDoubleMin;
    long double longDoubleMax;

    ____________________________
    ____________________________
    ____________________________
    ____________________________
 
    printf("%e %e\n", doubleMin, doubleMax);
    printf("%Le %Le\n", longDoubleMin, longDoubleMax);
 
    return 0;
}

 

정답

doubleMin = DBL_MIN;
doubleMax = DBL_MAX;
longDoubleMin = LDBL_MIN;
longDoubleMax = LDBL_MAX;

 

float.h 헤더 파일에는 실수 자료형의 최솟값과 최댓값이 정의되어 있다


8.12 오버플로우

다음 소스 코드를 완성하여 -inf가 출력되게 만드세요.

정답에는 밑줄 친 부분에 들어갈 코드만 작성해야 합니다.

#include <stdio.h>
#include <float.h>
 
int main()
{
    float num1 = _______;
 
    num1 = num1 * 1000.0f;
 
    printf("%f\n", num1);
 
    return 0;
}

 

정답

-FLT_MAX

 

- inf 출력되었기 때문에 

float 의 최댓값인 FLT_MAX 에 -를 붙여 음수로 만들어준다