2017-03-13 6 views
0

출력이 풍부한 숫자가 아닌 2 진수 일 필요가있는 리셋 코드 문제를 해결하고 있습니다.동적 비트 세트를 사용하여 십진수 변환

저는 10 진수를 가지고 있으며 비트 셋을 사용하여 변환을 시도하고있었습니다.

나는 수 n이 주어 자리의 수를 반환하는 함수를 썼다 :

int digitNum (int n){ 
    int digit = 0; 
    while(n!=0){ 
     n/=2; 
     digit++; 
    } 
    return digit; 
} 

을하지만 내가 전화했을 때,

int digit = digitNum(res); 
result = bitset<digit>(res).to_string(); 

숫자가 일정해야합니다. 나는 boost :: bitset을 읽었고, 어떻게 동적 비트셋을 사용하여 문제를 해결할 수 있는지 보지 못했다. http://www.boost.org/doc/libs/1_63_0/libs/dynamic_bitset/dynamic_bitset.html

왜냐하면 각 비트를 손으로 정의하기 때문입니다. 더 이상 바이너리로 변환하지 않습니다.

+0

빌드 오류가있는 경우 빌드 오류 그런 다음 코드에서 오류가있는 위치를 표시합니다. –

+0

문제에 관해서는 템플릿은 C++의 순수한 컴파일 타임 기능입니다. 템플릿은 런타임에 생성 할 수 없습니다. 컴파일러에 따라 * constexpr *을 조사하는 것이 좋습니다. –

+2

이미지의 가치는 천 단어입니다. 한 단어의 이미지는 파일 크기로 천 단어의 가치가 있습니다. 코드 이미지를 게시하지 마십시오. –

답변

0

비트셋은 템플릿입니다. <>의 모든 옵션은 컴파일 타임에 생성되므로 런타임에 변수의 입력을 받아서 템플릿 매개 변수를 선택할 수 없습니다. 기존의 비트셋과 같은 루프를 사용하여 비트 세트와 동일한 작업을 수행 할 수 있습니다.

string numToBits(int number) 
{ 
    if (number == 0) 
     return "0"; 

    string temp; 

    int n = (number > 0) ? number : - number; 

    while (n > 0) 
    { 
     temp = string((n & 1) ? "1" : "0") + temp; 
     n = n/2; 
    } 

    if(number < 0) 
     temp = "-" + temp; 

    return temp; 
}