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. 참 조

 
 

[STL] Bitset 생성 및 초기화 사용법

  1. bitset bitset은 0 또는 1, true 또는 false의 값을 갖도록 필요한 경우 사용할 수 있다. 이와 같은 형태의 따라서 여러가지 비트 연산을 할 수 있도록 여러 멤버 함수들을 지원한다. 또한, 마찬가지

notepad96.tistory.com

 

 

300x250