2017-03-13 1 views
0

Je résous un problème de code à barres, dont la sortie doit être un nombre binaire sans chiffres abondants.Utilisation de bitset dynamiques pour convertir des nombres décimaux

J'ai le nombre décimal et j'essayais d'utiliser le bitset pour faire la conversion.

J'ai écrit une fonction pour renvoyer le nombre de chiffres étant donné le nombre n:

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

Mais quand je l'ai appelé,

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

le chiffre doit être une constante. J'ai lu le boost :: bitset, et je ne vois pas comment je peux utiliser un bitet dynamique pour résoudre mon problème. http://www.boost.org/doc/libs/1_63_0/libs/dynamic_bitset/dynamic_bitset.html

car elle définit chaque bit à la main. Il ne se convertit plus en binaire.

+0

Si vous avez des erreurs de compilation, copier-coller les erreurs de compilation (* sous forme de texte *) dans le corps de la question à la place. Ensuite, incluez par exemple commentaires dans le code pour montrer où sont les erreurs. –

+0

En ce qui concerne votre problème, les modèles sont une pure fonctionnalité de compilation de C++. Les modèles ne peuvent pas être créés au moment de l'exécution. En fonction de votre compilateur, vous pouvez rechercher * constexpr *. –

+2

Une image vaut mille mots. Une image d'un mot vaut mille mots - en taille de fichier. Ne postez pas d'images de code. –

Répondre

0

bitset est un modèle. Toute option dans <> est générée lors de la compilation, de sorte qu'ils ne peuvent pas prendre une entrée d'une variable au moment de l'exécution pour choisir les paramètres du modèle. vous pouvez utiliser une boucle tout comme votre existant pour faire le même travail que bitset:

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; 
}