안녕하세요. BlockDMask입니다.
C++에서 정수를 표현할 때 진수를 표현하는 방법과 자릿수를 표기하는 방법에 대해서 알아보겠습니다.
<목차>
1. 8, 16, 2진수 표기법
2. 자릿수 표기법
1. C++ 2진수, 8진수, 16진수 표기법
- C++ 2진수 표기
"0b숫자(2진수)"
2진수로 표기하는 것은 C++ 11에서부터 가능합니다.
표기하고자 하는 숫자 앞에 숫자 0과 알파벳 b "0b"를 붙이게 되면 2진수로 표기가 됩니다.
0b 뒤에 오는 숫자는 2진수로 표현된 숫자 이어야 합니다.
즉 0b1010, 0b10 등 0과 1로 이루어진 2진수 이어야 하는 것입니다.
- C++ 8진수 표기
"0숫자(8진수)"
8진수로 표기하려 하면 숫자 0을 붙이면 됩니다.
0 뒤에 오는 숫자는 8진수로 표기된 숫자 이어야 합니다.
- 16진수 표기
"0x숫자(16진수)"
16진수로 표기하려 한다면 숫자 0과 알파벳 x를 합쳐서 "0x"를 표현하고자 하는 숫자 앞에 붙이면 됩니다.
0x뒤에 오는 숫자는 당연하게도 16진수로 표기된 숫자 이어야 합니다.
바로 예제에서 확인해보시죠.
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
|
#include<iostream>
using namespace std;
int main(void) {
int a = 100; // 10진수로 표현한 100
int b = 0b01100100; // 2진수로 표현한 100
int c = 0144; // 8진수로 표현한 100
int d = 0x64; // 16진수로 표현한 100
cout << "10진수 100 : " << a << endl;
cout << " 2진수 0b01100100 : " << b << endl;
cout << " 8진수 0144 : " << c << endl;
cout << "16진수 0x64 : " << d << endl;
cout << endl << endl;
int e = 20; // 10진수
//int f = 0b20; // 2진수로 표현한 숫자인데 0, 1이 아닌 숫자가 있으므로 error
int f = 0b1010; // 2진수
int g = 020; // 8진수
int h = 0x20; // 16진수
cout << "10진수 20 : " << e << endl;
cout << " 2진수 0b1010 : " << f << endl;
cout << " 8진수 020 : " << g << endl;
cout << "16진수 0x20 : " << h << endl;
return 0;
}
|
cs |
10진수는 앞에 아무것도 입력하지 않고 그대로 숫자 그대로 사용하게 되면 10진수를 나타내게 됩니다.
예제를 보면 똑같이 100을 나타내는 표현인데
10진수는 100
2진수는 0b01100100
8진수는 0144
16진수는 0x64
로 각각 표현방법이 다른 것을 확인할 수 있습니다.
2. C++ 자릿수 표기법
C++11부터 가능해진 자릿수 표기법에 대해서 간단하게 알아보겠습니다.
숫자가 길어지면 길어질수록 한 번에 자릿수가 눈에 띄지 않으니 생긴 것으로 보이네요.
특히 C++11에 long long 타입이 추가되면서 큰 숫자를 다룰일이 많아서 그런지, 이런 편리한 표기법을 추가해준 것이 아닐까요?
자릿수를 표기하는 방법
숫자 사이사이에 작은따옴표 '를 넣어주면 됩니다.
코드에는 ' 작은따옴표가 보이지만, 실제 컴파일될 때 ' 가 자동적으로 무시되기 때문에, 순전히 코드를 작성할 때 가독성을 높여주기 위해서 만들어진 것이라 보면 되겠습니다.
예제로 바로 확인해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include<iostream>
using namespace std;
int main(void) {
int num1 = 100000000;
int num2 = 100'000'000;
int num3 = 10000'00000;
int num4 = 1'0'0'0'0'0'0'0'0'0;
cout << "100000000 : " << num1 << endl;
cout << "100'000'000 : " << num2 << endl;
cout << "10000'00000 : " << num3 << endl;
cout << "1'0'0'0'0'0'0'0'0'0 : " << num4 << endl;
return 0;
}
|
cs |
이렇게 긴 숫자들도C++11부터는 ' 작은따옴표를 통해서 자릿수를 쉽게 구분할 수 있게 되었습니다.
' 는 우리가 구분하기 위해 사용하는 것이기 때문에 특별한 위치 상관없이 막 집어넣을 수 있습니다.
당연하겠지만 맨 앞과 맨 뒤에 ' 작은따옴표를 쓰면 문자 같은 걸로 인식하기 때문에 맨 앞 맨 뒤를 제외하고 숫자 사이사이 아무 곳에나 넣어서 사용하면 됩니다.
오늘의 포스팅은 여기까지 입니다.
오늘은 C++11에서 2진수 표기법, 자릿수 구분법 그리고 기존 C++에 있었던 8진수 표기법과 16진수 표기법까지 알아보았습니다.
오늘도 방문해주셔서 감사합니다.
'<개인공부> > [C++]' 카테고리의 다른 글
[C++] nullptr (널 포인터 리터럴) (3) | 2021.02.17 |
---|---|
[C++] 디폴트 매개변수 (default parameter) (0) | 2021.02.15 |
[C++] constexpr 상수 (0) | 2021.02.11 |
[C++] 인라인 함수 (inline function) (1) | 2021.02.10 |
[C++] std::setw, std::setfill, std::left, std::right (입출력 형태 지정2) (0) | 2021.02.05 |
[C++] 8진수, 10진수 16진수 출력 (입출력 형태 지정 1) (1) | 2021.02.04 |
[C++] 표준 입출력 std::cin, std::cout 정리 및 예제 (0) | 2021.02.02 |
[C++] namespace 네임스페이스 정리 및 예제 (2) | 2021.02.01 |