04 오버플로우, 언더플로우
1 오버플로우와 언더플로우
-오버플로우: 자료형의 최대값보다 큰 값을 저장하려고 할 때 발생하는 문제
-언더플로우: 자료형의 최소값보다 작은 값을 저장하려고 할 때 발생하는 문제
*C++은 오버플로우와 언더플로우에 대해서 오류메세지를 생성하지 않음
2 정수 / 부동 소수점의 오버플로우와 언더플로우
-정수는 오버플로우와 언더플로우가 발생할 때, 범위를 한 바퀴 도는 현상이 있음
-부동 소수점은 그러한 현상이 없음
ㄴ> 대신 오버플로우는 양의 무한대로 수렴, 언더플로우는 음의 무한대로 수렴함
*double 자료형의 오버플로우와 언더플로우를 확인해보자
#include <iostream>
// 시스템마다 최소, 최대값이 다르므로 라이브러리를 사용해서 초기화함
#include <limits>
using namespace std;
int main()
{
// double 자료형의 최대값과 최소값 검색
double num1 = +numeric_limits<double>::max();
double num2 = -numeric_limits<double>::max();
//double 자료형의 최대값과 최소값 출력
cout << "double의 최대값: " << num1 << endl;
cout << "double의 최소값: " << num2 << endl;
// 값에 1000.00 곱하기
num1 *= 1000.00;
num2 *= 1000.00;
// 오버플로우와 언더플로우된 값 출력
cout << "오버플로우가 일어난 num1 * 1000의 값: " << num1 << endl;
cout << "오버플로우가 일어난 num2 * 1000의 값: " << num2 << endl;
return 0;
}
05 데이터 형식 조정
-상황에 따라 입출력 형식을 바꿔야 할 때 조정자라는 객체를 사용한다
1 출력 조정자
-삽입 연산자에 출력 조정자를 전달하면 출력 형식을 조정할 수 있다
-출력 조정자는 매개변수 없는 조정자와 있는 조정자로 구분
-매개변수 없는 조정자
ㄴ> <iostream>에 포함돼있음
ㄴ> endl을 제외한 모든 조정자는 출력 스트림의 상태를 변경 -> 즉, 1회만 지정하면 계속 적용
-1 endl 조정자
-2 불 리터럴 조정자(noboolalpha, boolalpha)
ㄴ> noboolalpha: 불 값을 정수(0 OR 1)로 출력
boolalpha: 불 값을 리터럴(false OR true)로 출력
-3 그 외 등등(dec,oct,hex,noshow/showbase,fixed,scientific,showpoint,showpos,uppercase,left,internal,right)
-매개변수 있는 조정자
ㄴ> <iomanip> 헤더를 읽어들여야 함
-1 setprecision(n) 조정자: n으로 소수점 뒤의 몇 자리까지 출력할지 지정한다(고정 소수점 출력 방식에서만 사용)
-2 setw(n) 조정자: n으로 전체 필드 크기를 지정한다(고정 소수점 출력 방식에서만 사용)
-3 setfill(ch) 조정자: 필드의 크기가 실제 출력 내용보다 클 때 발생하는 패딩을 어떤 문자로 채울지 지정한다
2 입력 조정자
-1 불 리터럴 조정자(noboolalpha, boolalpha)
ㄴ> boolalpha: 불을 0,1이 아닌 false, true로 입력할 수 있는 조정자 (<-> noboolalpha는 기본값: 0,1로 입력)
-2 진법 변경 조정자(dec, oct, hex)
ㄴ> 정수를 8진수와 16진수로 입력할 수 있는 조정자
'2023 c++' 카테고리의 다른 글
23년 C++ chap4 조건문 -> 관계,일치표현식 / if조건문 / if-else조건문 (0) | 2023.07.18 |
---|---|
23년 C++ chap3(5) 표현식과 문장 -> 문장 (0) | 2023.07.05 |
23년 C++ chap3(3) 표현식과 문장 -> 결합 방향 (0) | 2023.07.04 |
23년 C++ chap3(2) 표현식과 문장 -> 자료형 변환 (0) | 2023.07.04 |
23년 C++ chap3(1) 표현식과 문장 -> 표현식이란 (0) | 2023.07.03 |