<개인공부>/[C++]

[C++] 8진수, 10진수 16진수 출력 (입출력 형태 지정 1)

BlockDMask 2021. 2. 4. 00:30
반응형

안녕하세요. BlockDMask 입니다. 
오늘은 C++ 표준 입출력에서 출력을 할때 진수를 지정해주는 것에 대해서 알아보려고 합니다.

 

<목차>
1. C++ 8진수, 10진수, 16진수 출력 방법 
2. C++ 8, 10, 16 진수 출력 예제

 

 

1. C++ 8진수, 10진수, 16진수 출력 방법


- 8진수 출력

std::oct

변수의 값을 8진수의 형태로 출력해주는 함수 입니다.
int n = 9;
std::cout << std::oct << n; // 변수 n 8진수 출력

- 10진수 출력

std::dec

변수의 값을 10진수의 형태로 출력해주는 함수 입니다.
int n = 10;
std::cout << std::dec<< n; // 변수 n 10진수 출력

- 16진수 출력

std::hex

변수의 값을 16진수의 형태로 출력해주는 함수 입니다.
int n = 11;
std::cout << std::hex<< n; // 변수 n 16진수 출력

 

각각 세 함수는 이후 나오는 변수의 값을 세팅해주는 것이기 때문에 한번 세팅을 하면 다시 되돌리지 않는한 진수가 정해져 버립니다.

이게 무슨 이야기 인가 하면 예제를 통해서 한번 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
int main(void)
{
    int num1 = 10;
    int num2 = 11;
    int num3 = 12;
    int num4 = 13;
 
    // 출력 16진수로 변경. num1 16진수 출력
    std::cout << std::hex << num1 << std::endl
 
    // num2 16진수 출력.
    std::cout << num2 << std::endl;    
    
    // 출력 10진수로 변경. num3 10진수 출력
    std::cout << std::dec << num3 <<std::endl;
 
    // num4 10진수 출력.
    std::cout << num4 << std::endl;
 
    return 0;
}
cs

16진수 출력

한번 std::hex를 통해서 16진수로 출력할 것이다. 라고 지정을 해버리면 해당 줄을 지나쳐도 
그 다음 변수(num2) 출력때도 16진수로 그대로 지정되서 나오는 것을 볼 수 있습니다.

이것을 std::hex가 포함되어있는 라인의 변수 num1 뿐만 아니라 그 다음 라인의 변수인 num2 까지 16진수로 나오는것으로 판단하면, 출력의 세팅을 바꿔 버린다는 것으로 볼 수 있습니다.

그래서 다시 std::dec 10진수 조작자 함수를 통해서 10진수로 세팅을 돌려주어야
그 다음 변수들(num3, num4)이 10진수 형태로 다시 출력되는 것을 볼 수 있습니다.

 

 

이렇게 입출력의 형태를 지정하는 함수들을 조정자 함수, 조작자 함수라 합니다.
영어로 표기를 하면 iomanipulator 라 부르기도 하고 I/O manipulator 라 부르기도 합니다.
풀어서 작성을 하면 input, output manipulator 입니다.

정리하면 이렇게 입력과 출력의 형태를 지정하는 것을 조정자, 조작자 함수라 하고 io manipulaor 라고 부른다. 라고 알고 계시면 되겠습니다.

위에서 배운 std::dec, std::oct, std::hex 들을 모두 조작자 함수라 부르며,
우리가 알고있는 개행 std::endl;도 I/O Manipulator (조작자) 함수의 일종입니다.

 

 

2. C++ 진수 출력 예제.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
 
int main(void)
{
    int a = 8;
    int b = 9;
    int c = 10;
    
    // 8진수로 출력
    std::cout << std::oct << " 8진수 출력 : " << a << std::endl;
 
    // 10진수로 출력
    std::cout << std::dec << "10진수 출력 : " << b << std::endl;    
    
    // 16진수로 출력
    std::cout << std::hex << "16진수 출력 : " << c <<std::endl;
 
    
 
    //굳이 한줄에 적지 않아도 됩니다.
 
    // 8진수로 출력
    std::cout << std::oct;
    std::cout << " 8진수 출력 : " << a << std::endl;
 
    // 10진수로 출력
    std::cout << std::dec;
    std::cout << "10진수 출력 : " << b << std::endl;
 
    // 16진수로 출력
    std::cout << std::hex;
    std::cout << "16진수 출력 : " << c << std::endl;
    
    return 0;
}
cs

8진수, 10진수, 16진수 예제

std::oct 함수를 통해서 8진수를 출력하고
std::dec 함수를 통해서 10진수를 출력합니다.
그리고 std::hex 함수를 통해서 16진수를 출력하면 됩니다.

예제처럼
std::cout << std::oct << a ; 처럼 한 라인 내에서 세팅을 변경하면서 출력할 수 도 있고 
std::cout << std::oct; 처럼 세팅후에 다음 라인에서 변수를 출력할 수도 있습니다.

 

오늘의 포스팅은 여기까지 입니다.
입출력 조작자 함수들 중에 진수 변환 8진수(std::oct), 10진수(std::dec), 16진수(std::hex)에 대해서 알아보았습니다.
감사합니다.

반응형