1. 진법 변환 개념
https://smallpants.tistory.com/176
2. C++ style Code
10진수 -> 2진수
1) bitset 사용방식
#include <iostream>
#include <bitset>
void decimal2binary()
{
int N = 5;
string binary = bitset<8 * sizeof(N)>(N).to_string();
cout << binary.substr(binary.find_first_not_of('0'));
}
2) 직접 구현 방식
#include <iostream>
void decimal2binary()
{
// 2-1) 소수점 위 변환
int n2bit = 5;
int result = 0;
for (int i = 1; n2bit >= 1; i *= 10) {
result = (n2bit % 2) * i + result;
n2bit /= 2;
}
std::cout << "5는 2진수로 : " << result << std::endl;
// 2-2) 소수점 아래 변환
double d2bit = 0.625;
std::cout << "0.625는 2진수로 0.";
while (d2bit != 0) {
d2bit *= 2;
std::cout << (int)d2bit;
if (d2bit >= 1) d2bit -= 1;
}
std::cout << std::endl;
}
2진수 -> 10진수
1) bitset 사용방식
#include <iostream>
#include <bitset>
void binary2decimal()
{
// bitset 객체에 넣고 to_ulong() 하면 끝
int num1 = 10;
int num2 = 15;
std::bitset<32> b1(num1); // b1 = 1010
std::bitset<32> b2(num2); // b2 = 1111
std::cout << b1 << std::endl; // 출력시 000000.....1010
std::cout << b1.to_ulong() << std::endl; // 출력시 10진수 10
}
2) 직접 구현 방식
#include <iostream>
void binary2decimal()
{
int result = 0;
int bit = 100; // 2진수 100이니 10진수로 4
for (int j = 0; bit >= 1; j++) {
result += (bit % 10) * pow(2, j);
bit /= 10;
}
std::cout << "이진수 100은 10진수로 " << result << std::endl;
3) 문자열 처리방식
string binary = "10011101";
cout << stoi(binary, nullptr, 2); // binary를 2진수로 해석해서 10진수로 출력
// 만약 8진수로 해석하고 싶다면 stoi(binary, nullptr, 8)처럼 사용