C++ Integer to Binary - 2진수 구하기
Notepad96
·2020. 11. 19. 13:23
300x250
1. integer to binary
양의 정수를 2진수의 문자열로 변환하기 위해서는
1. bitset 컨테이너를 이용
2. >> 비트 연산을 이용
할 수 있다.
bitset일 경우 선언 시 상수의 사이즈를 입력해야하므로 임의의 넉넉한 사이즈로 생성해야 한다.
비트 연산을 사용할 경우 string의 덧셈 연산이 빈번하게 발생한다.
2. 코 드
환경 : Visual studio 2019
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
string to_binary(int num) {
string s = "";
while (num > 0) {
if (num % 2 == 1) s = "1" + s;
else s = "0" + s;
num >>= 1;
}
return s;
}
int main() {
int num = 54321;
cout << "숫자 " << num << " 을 2진수로\n";
/* integer to binary string */
// 1. bitset 사용
bitset<100> bs(num);
string s = bs.to_string();
s = s.substr(s.find('1'));
cout << s << "\n";
// 2. bit 연산을 통하여 구하기
cout << to_binary(num) << "\n";
cout << "========================================\n";
/* binart string to long */
cout << "이진수 문자열 " << s << " 을 정수로\n";
bitset<100> bs2(s);
cout << bs2.to_ulong() << "\n";
return 0;
}
- bitset의 경우 상수의 사이즈로 생성 가능하기 때문에 넉넉한 임의의 상수 100을 입력하였다.
bitset은 0, 1 두 값만 갖는 구조체이다. ( 자세한 것은 참조 글 확인 )
따라서 사이즈 100이므로 2^100 미만의 수까지 받을 수 있다.
bitset을 인자로 숫자를 입력받는 생성자로 생성하면 2진수의 형태로 저장되며 이를 to_string 함수로 갖고 오면 2진수 문자열로 변환이 된다.
단, bitset의 사이즈를 100으로 생성하였기 때문에 빈자리는 0으로 채워져있다.
따라서 substr 함수를 사용하여서 잘라 2진수의 시작부분을 찾아서 잘라주어야 한다.
- 비트 연산을 이용하여 오른쪽으로 한칸씩 옮기면서 각 자리의 비트를 구하여 연결한다.
- bitset에는 문자열을 인수로 받는 생성자 또한 있으며
이를 unsigned long 타입으로 반환해주는 to_ulong 함수를 사용하면
문자열 형태의 2진수를 정수로 변환할 수 있다.
3. 참 조
300x250
'C++ > Algorithm' 카테고리의 다른 글
[Algorithm/C++] 버블 정렬(Bubble Sort) - 거품 정렬 (0) | 2022.09.18 |
---|---|
C++ 숫자 각 자릿수 구하기, 문자열 숫자 각 자릿수 구하기 (0) | 2020.11.21 |
C++ 소수 판별하기 (0) | 2020.11.16 |
2의 n제곱 수인지 판별하기 (0) | 2020.11.07 |
C++ 문자열 나누기 - string split (0) | 2020.11.03 |