int를 binary로 변환하여 사용하여 연산을 진행한 후 다시 int로 변환하는 문제들을 많이 만났다. 특히 bit로 연산을 하는 경우도 많기 때문에 알아둘 필요성이 있다고 생각했다.
2가지 방법 존재
1. bitset 컨테이너
선언 시 상수 사이즈 입력으로 임의의 넉넉한 사이즈로 생성
2. >> bit 연산
string의 덧셈 연산이 빈번하게 발생
#include <iostream>
#include <string>
#include <bitset> # bitset 추가
using namespace std;
int main() {
int num = 12345;
const int n = 100;
# 1. 변환방법 1
bitset<n> bs(num);
string s = bs.to_string();
# 2. 변환방법 2
string binary = bitset<n> (num).to_string();
return 0;
}
결과 -> 11000000111001
#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 = 12345;
string s = to_binary(num);
return 0;
}
3가지 방법 존재
1. stoi()
2. bitset 컨테이너
선언 시 상수 사이즈 입력으로 임의의 넉넉한 사이즈로 생성
정수형
int stoi(const string& str, size_t idx = 0, int base = 10)
long stol(const string& str, size_t idx = 0, int base = 10)
3번째 인자가 진수 표현이므로 2를 넣으면 2진수를 int로 변환한다.
#include <iostream>
#include <string>
using namespace std;
int main() {
string s = "0011000000111001";
int num = stoi(s, nullptr, 2);
return 0;
}
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main() {
string s = "0011000000111001";
/* binart string to long */
cout << "이진수 문자열 " << s << " 을 정수로\n";
bitset<100> bs2(s);
cout << bs2.to_ulong() << "\n";
return 0;
}