하도 검색했는데 안되길래 걍 내가 구현했는데,
ltoa 등의 함수(맨 앞이 i의 대문자 I가 아니라 L의 소문자 l)를 이용하는 것도 있었으나, 이건 glib에서 지원안하니까 패스
sprintf를 이용해도 좋으나 이번에는 for문과 char 배열을 이용한 trivial한 방법을 사용해보도록 한다.

목적.
string을 받아서 그 string의 멤버함수 c_str()을 불러서 const char*로 만든뒤, 그걸 atoi로 integer로 변환하고, 그 정수 값을 2진수로 표현하는 string 배열로 출력하는 것. bit수를 받을 수도 있다.
물론 파라메터로 받은 string num을 int로 바꾸는 과정을 없애면 걍 숫자 파라메터로 받을 수도 있다.
char*를 안거치고, string의 append 멤버함수를 이용해도 된다. 오버헤드? 그런거 그닥 따져야하나?

string num_to_bin(string num, int bits)
{
char* result = new char[bits+1];
int number=atoi(num.c_str());
for(int i=0; i!=bits; ++i)
{
result [ (bits-1)-i ] = (number>>i & 1)+'0';
}
result[bits]='\0';
return string(result);
}


새로 배웠는데,
글쓰는 곳에서 블럭단위의 인덴팅이 되는군 ㅋ0ㅋ


중요한건 저 자체로도 2's complement를 구현해준다..
따로 음수라고 (~number)+1 같은 삽질을 하지 않아도 됨. 저걸 하게 되면 다시 양수가 되어버린다.

2's complement에 대한건 위키 http://en.wikipedia.org/wiki/Two's_complement 이곳을 참조하시고

+ Recent posts