[C언어] 정수 자료형, 실수 자료형 - 코딩도장
[코딩도장] Unit 7 정수 자료형 사용하기
1. 정수 자료형
1.부호 있는 정수
C언어에서 정수 자료형은 크게 int, char 가 있다
부호 키워드(signed, unsigned)와 크기(long, short)를
붙여서 특성을 정의할 수 있다
- signed : 부호 있는 정수를 표현. 보통 signed 키워드는 생략
- unsigned : 부호 없는 정수를 표현. 값은 0부터 시작
printf 함수에서 char, short, int는 서식지정자 %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_t, uint16_t, uint32_t, uint64_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 에 -를 붙여 음수로 만들어준다