10진법 (Decimal) 숫자를 2진법 (Binary) 로 변환하는 방법은 꽤 많다.
그리고 목적에 따라 더더욱 많아진다.
단순하게 출력만 할 것이라면 재귀등으로 나누면서 구현도 가능하지만,
이럴 경우 해당 값을 직접적으로 이용은 할 수 없다.
#include <bitset> 을 필요로 한다.
string binary = bitset<2진법_표기_갯수>(10진법_숫자).to_string();
이렇게 하면 가장 간단한 형태가 된다.
다만, 여기서 함정이 하나 있다면, 바로 위에서 한글로 표기한 2진법_표기_갯수 라는 공간에 어떠한 숫자를 넣냐에 따라 결과가 달라진다.
2진법으로 계산은 맞긴 한데, 표기가 달라진다.
숫자 10을 2진법으로 표기시
1010 이 된다.
그런데 위 코드를 아래와 같이 이용한다면
string binary = bitset<6>(10).to_string();
001010
string binary = bitset<8>(10).to_string();
00001010
이런식으로 숫자입력에 따라 앞에 0이 몇 개가 더 붙는지가 결정된다.
위와 같이 앞에 0 표기가 필요하다면 이게 가장 간편하지만, 종종 0이 없이 매번 값에 따라 유동적인 표기를 원하는 경우도 있다.
쉽게 말하면 앞에 0으로 시작되는 2진법은 필요가 없는 형태가 그것이다.
그 경우 아직 위와 같이 한 줄로 되는 코드를 찾지는 못했지만,
아래와 같은 함수를 만들어 볼 수 있다.
#include <string>
#include <sstream>
가 필요하다.
string convertToBinary(int number)
{
string ans;
while (number > 0)
{
stringstream tempstream;
tempstream << number % 2;
string temp(tempstream.str());
ans.append(temp);
number = number / 2;
}
reverse(ans.begin(), ans.end());
return ans;
}
숫자 배열로 구현한거랑 사실 큰 차이는 없다.
string 으로 출력하기 위해서 위와같은 형태를 했을 뿐이다.