따배씨++ (5. iostream)

김동우·2021년 2월 23일
0

안녕하십니까. 김동우입니다.

이번 노트에서는 우리가 매일 쓰는 헤더 iostream에 대해 얘기를 좀 해볼까 합니다.

사실 전 글에 비해 깊이가 있는 것이 아니고, 목차의 흐름에 맞춰 노트를 적다 보니 긴 글은 아닐 것이라 생각합니다.

그럼에도 다시 개념을 잡고 넘어가도록 하겠습니다.

  1. #include <iostream>

    우리가 매번 작성하는 코드에서 가장 상단에 위치한 preprocessor directive 코드입니다.

    그리고 이 녀석은 C++에서 지원하는 입출력 표준이기도 하죠.

    이와 함께 묶어 잠깐 말씀드렸던 것이 C에서 사용하는 stdio.h 입니다.

    이 stdio 헤더의 기능을 따로 C++에서 담아둔 헤더파일이 있는데, 사용을 원하신다면

    #include <cstdio>를 작성해주시면 되겠습니다.

    자, 다시 지난 노트에서도 적어두었듯, 이 iostream이라는 헤더의 내부에는 많은 함수가 내장되어 있습니다.

    cin, cout, endl 등등 우리가 사용했던 함수들이 내장되어 있는 곳입니다.

    우린 알게 모르게 iostream의 함수를 사용해왔고, 이를 위해 아무 의미 없어보이는 코드를 가장 상단에 적어왔던 것으로 이해하시면 되겠습니다.

    그렇다면, 이 iostream에 이름에 맞게 각 함수, 연산자의 사용을 조금 쉽게 알아봅시다.

  2. flow, stream

    강의에서는 이를 위해 하나의 줄기, stream이라는 개념을 도입했습니다. 입력함수와 입력 연산자, 출력함수와 출력 연산자 둘의 상호작용을 stream 이라는 표현을 이용했습니다.

    그러한 표현은 저도 지난 노트에서 flow라는 개념을 도입해 이용했었는데요, 시각적 효과를 위해 코드를 첨부하겠습니다.

    앞으로는 글 작성 시간을 조금 줄이기 위해 실습에서 사용한 코드를 그대로 첨부할 예정입니다.

    제 생각의 flow도 그대로 담겨있겠네요 🤣

#include <iostream> // cout, cin, endl, ...
#include <cstdio> // printf

int main() {

	using namespace std;
	// 지역 내 std 사용을 하지 않아도 std가 입력이 된 상태로 인식

	int x = 1024;
	double pi = 3.141592;

	cout << "I love this lecture!\n" << endl; //namespace std
	// 부등호 2개의 의미는 flow의 형태고, 이를 stream의 구성으로 보자.
	// endl - > 줄바꿈
	// \n = new line
	// cout - printf 방법은 다르나, 출력함수다.
	// cout - "" - endl 의 흐름(flow)과 행 전체를 stream으로 보자.

	cout << "x is " << x << " pi Is" << pi << endl;
	// 소수점 정밀도?
	
	cout << "abc" << "\t" << "def" << endl;
	cout << "ab" << "\t" << "cdef" << endl;
	// \t = tab

	cout << "\a";
	// \a = audio

	return 0;
}
  1. 입력
#include <iostream>
#include <cstdio>

int main() {
	using namespace std;

	int x = 1;
	// integer의 범위는 어떻게 될까?

	cout << "Befor your input, x was " << x << endl;

	cin >> x;
	// >> input operator

	cout << "Your input is " << x << endl;

	return 0;
}
  1. 자문자답

    소수점 정밀도는 어떤 의미일까?

    출력 코드를 실행시킬 경우 pi에 대입된 값이 완전하게 나오지 않고 반올림을 거쳐 출력됩니다.

    이러한 이유는 무엇일까요?

    추후 자세히 배울 내용이긴 하지만, 미리 예습으로 생각해봅시다.

    double이 표현하는 자릿수는 어디까지이며, 실제 15자리 이상을 표현할 수 있는 double type의 pi값이 어째서 3.14159 까지 표현될까?

    • setprecision 함수를 배우기 전에는 그 답을 명쾌하게 내리는 것은 어렵다는 생각이 들었습니다.

    integer의 범위는 어떻게 될까?

    integer는 4byte의 값을 표현할 수 있습니다. 여기서 중요한 것은, 4byte는 다시 32bit로 표현되는 크기라는 점입니다.

    1bit의 경우 2^1 범위를 표현할 수 있는 수치입니다.

    그렇다면 4byte인 32bit는 2^32 범위의 숫자를 표현할 수 있으며, 이 범위는 0과 음의 정수들을 포함하고 있습니다.

    즉, 4,294,967,296/2 - 1(0 포함) 범위 내의 양의 정수를 표현할 수 있고,
    4,294,967,296/2 범위 내의 음의 정수를표현할 수 있습니다.

    int라는 data type이 가지는 범위는 다시 말해 –2,147,483,648 ~ 2,147,483,647 가 되겠습니다.

    이러한 data type의 범위에 대해 궁금하시다면,

    MS docs - dtype
    링크를 들어가보시길 권장드립니다.

자, 그럼 이번 노트는 여기까지 적도록 하겠습니다.

0개의 댓글

관련 채용 정보