2017-04-06 1 views
0

Im apprentissage C++ à la minute avec le livre par Stanley Lippman. Je suis en train d'étudier le paragraphe nommé "class Bitset". Il y a un exercice où il me donne une séquence numérique à transformer en bitset < 32>. La séquence numérique est: 1,2,3,5,8,13,21. Puis-je vous demander si mon code est correct pour représenter cette séquence numérique? Lippman veut aussi que j'utilise chaque bit en bitset pour représenter la séquence, mais bitset peut-il stocker plus de 1 valeur? Im le faire première fois et la seule idée que je suis arrivé est:bitset et séquence numérique C++

int index = 0; 
const int size_ = 7; 
unsigned long f2[size_]; 

int main() 
{ 
    setlocale(LC_ALL,"rus"); 

    string try1; 

    cout << "Type your numerical sequence in binary code: " << endl; 

     while (cin >> try1) { 

     bitset<32> go(try1); 

     if (go.to_ulong() > 21) { cout << "End of sequence" << endl; break; }   

     f2[index] = go.to_ulong(); 

     index++; 

     try1.clear(); 

     go.reset(); 
     } 

    for (index; index >= 0; index--) { 
     cout << f2[index] << " "; 
    } 

    system("pause"); 

    return 0; 
} 
+1

N'êtes-vous pas simplement supposé définir les bits 1,2,3,5,8,13 et 21? – molbdnilo

+0

La séquence est donnée: 1,2,3,5,8,13,21. Comment puis-je initialiser le bitet objet <32> pour le représenter? Comment affecter des valeurs pour représenter cette séquence au vecteur binaire vide? Ecrire l'option d'initialisation et une variante avec l'attribution d'une valeur à chaque bit – FishTheBig

+0

Ici, il est, je ne comprends pas honnêtement ce qu'il me demande de faire – FishTheBig

Répondre

0

est bitset peut stocker plus de 1 valeur en elle?

Eh bien, oui — c'est un ensemble de bits, d'où le nom. Chaque bit peut être activé ou désactivé, ce qui peut être considéré comme une "valeur". Ainsi, un std::bitset<32> peut encoder 32 "valeurs" à l'intérieur. En fin de compte, tout le bitset lui-même n'a qu'une seule valeur à la fois, mais c'est la beauté des données de "codage" — chaque valeur est composée de blocs de construction plus petits. Pour résoudre ce problème, vous devez vous rappeler que chaque valeur stockée sur votre ordinateur se compose d'une série de bits.

On suppose que vous êtes censé coder la séquence x,y,...,z en définissant des bits aux positions x,y,...,z. Pour cela, vous pouvez utiliser la fonction set. Par exemple, une fois que vous avez défini les bits 1, 2, 3, 5, 8, 13, 21 (et je suppose ici un système basé sur 0 afin que vous puissiez prendre en charge l'entrée 0), votre bitset sera « contenir »:

#0 #4 #8 #12 #16 #20 #24 #28 #32 
+----+----+----+----+----+----+----+----+ 
|0111 0100 1000 0100 0000 0100 0000 0000| 
+-^^^+-^--+^---+-^--+----+-^--+----+----+ 
    ||| | |  |   | 

Lorsque traduit de binaire en décimal, cette séquence est le numéro 1954808832, ce qui est exactement ce que vous aurez si vous appelez ensuite to_ulong() sur l'objet bitset.

Dans votre code, vous créez plutôt un nouveau bitet pour chaque valeur entrée, ce qui est inutile; votre stockage réel est juste un tableau de unsigned long, ce qui n'est pas conforme à l'esprit de l'exercice (qui consiste à utiliser bitset pour le stockage à la place). Vous appelez également juste avant que l'objet ne soit hors de portée (à la fin du corps de la boucle), ce qui ne fait rien.

+0

Merci mon pote. :) – FishTheBig

0

Vous cherchez probablement quelque chose comme ceci:

#include <bitset> 
#include <iostream> 

int main() 
{ 
    std::bitset<32> my_bitset; 
    for (auto position : { 1, 2, 3, 5, 8, 13, 21 }) 
    { 
    my_bitset.set(position, true); 
    } 

    // Initialize with "default" bitset mask 
    std::bitset<32> another_bitset(my_bitset.to_ulong()); 
    for (auto bit = 0u; bit < another_bitset.size(); ++bit) 
    { 
    std::cout << "bit no. " << bit << " is " << (another_bitset.test(bit) ? "" : "not ") << "set" << std::endl; 
    } 

    return 0; 
} 
+0

Je ne comprends pas le but du second bitset. –

+0

C'est la deuxième partie de 'Exercice 17.10' - vous devez créer un autre bitet avec et initialiser la valeur par défaut. Il y a plusieurs façons de régler/annuler/initialiser les bits, et cet exercice vous aide à vous familiariser avec certains d'entre eux. –

+0

Merci pour l'aide bro – FishTheBig