ex)
#include <stdio.h>
int main(void)
{
char num1 = -129; // 최솟값(-128)보다 -1만큼 작은 값 => underflow
char num2 = 128; // 최댓값(127)보다 +1만큼 큰 값 => overflow
printf("%d \n", num1);
printf("%d \n", num2);
num1 = -130;
num2 = 129;
printf("%d \n", num1);
printf("%d \n", num2);
return 0;
}
// 127
// -128
// 126
// -127
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("Float's minimum %e, maximum %e \n", FLT_MIN, FLT_MAX);
printf("Double's minimum %e, maximum %e \n", DBL_MIN, DBL_MAX);
printf("Long's minimum %e, maximum %e \n", LDBL_MIN, LDBL_MAX);
return 0;
}
// Float's minimum 1.175494e-38, maximum 3.402823e+38
// Double's minimum 2.225074e-308, maximum 1.797693e+308
// Long's minimum 2.225074e-308, maximum 1.797693e+308
#include <stdio.h>
int main(void)
{
float num1 = 3.4e+30; // 3.4x10의 30승
double num2 = 3.4e+30;
printf("%f, %e, \n", num1, num1); // %f는 고정 소수점, %e는 부동 소수점 출력
printf("%lf, %le, \n", num2, num2);
return 0;
}
// 3399999900045657695752095268864.000000, 3.400000e+30, // float형 오차 발생
// 3400000000000000236492710477824.000000, 3.400000e+30, // double형은 정상
#include <stdio.h>
int main(void)
{
float num1 = 0.123456789012345;
double num2 = 0.123456789012345;
printf("float %f \n", num1);
printf("double %lf \n", num2);
printf("float %.15f \n", num1);
printf("double %.15lf \n", num2);
return 0;
}
// float 0.123457 // 소수점 6자리까지 표현 가능. 7자리에서 반올림
// double 0.123457 // 특정 길이 지정 없으면 기본 6자리
// float 0.123456791043282 // 6자리 초과부터 오차 발생
// double 0.123456789012345 // 오차없이 출력
#include <stdio.h>
int main(void)
{
int num1 = 100;
double num2 = 3.14;
printf("%lf \n", num1 + num2); // 정수 + 실수, 정수를 double형으로 변환해서 실수 + 실수로 연산을 수행함
return 0;
}
// 103.140000
#include <stdio.h>
int main(void)
{
char num1 = 130; // 대입 연산자 기준으로 오른쪽(130)에서 왼쪽 num1(char)으로 자동 형변환, 오버플로우 발생
int num2 = 3.14; // 0.14만큼 데이터 손실
double num3 = 3; // 작은 형에서 큰 형으로 변환되어 데이터 손실 없음
printf("%d, %d, %lf \n", num1, num2, num3);
return 0;
}
// -126, 3, 3.000000
#include <stdio.h>
int main(void)
{
int num1 = 10;
int num2 = 3;
double result;
// 정수 / 정수
result = num1 / num2;
printf("result: %lf \n", result);
// 실수 / 정수
result = (double)num1 / num2;
printf("result: %lf \n", result);
// 정수 / 실수
result = num1 / (double)num2;
printf("result: %lf \n", result);
// 실수 / 실수
result = (double)num1 / (double)num2;
printf("result: %lf \n", result);
return 0;
}
// result: 3.000000
// result: 3.333333
// result: 3.333333
// result: 3.333333
#include <stdio.h>
typedef int good;
good main(void)
{
good num1 = 3000;
good num2 = 10000;
good num3 = 2000;
good num4 = 0;
num4 = num1 + num2 + num3;
printf("total good: %d \n", num4);
return 0;
}
// total good: 15000
Reference
강의: 박정민, 『C 프로그래밍』, KOCW 한국산업기술대학교, 6강
교재: 박정민, 『열혈강의 C 언어 본색 명강의가 일으키는 C 언어 기적』, 프리렉 (2011), p131-164.