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 으로 출력하기 위해서 위와같은 형태를 했을 뿐이다.






+ Recent posts