2017-09-21 5 views
0

J'aimerais disposer d'un type de données qui stocke un nombre binaire de 21 chiffres sur lequel je peux effectuer des opérations. J'ai essayéType de données binaire C++

unsigned long long int 

et il était juste à peine petit. Cela gaspille beaucoup d'espace bc mon numéro est binaire et l'ordinateur le stocke en nombre entier donc la question est de savoir s'il existe un type qui le stocke comme un nombre binaire mais je peux encore faire comme des opérations modulaires dessus.

J'ai lu quelques articles liés et je ne pense pas qu'ils ont tout à fait répondu à ma question. S'il y en a un que j'ai raté j'apprécierais que quelqu'un me pointe là merci.

mise à jour afin entendre est un snipit du code qui est le problème

Il se bloque après

unsigned long long int a; 
cin>>a; 

Ce qui dans la sterne doit aller à

void convertNumtoArray(unsigned long long int a, x & binaryA){ 
     int j=0;        
     while(a!=0){       
       unsigned long long int remainder=a % 10; 
       a=a/10; 
       binaryA.a[j]=remainder; 
       binaryA.length_a=j+1; 
       j++; 
     } 
} 
+0

21 chiffres binaires sont 21 bits. Si ce n'est pas ce que vous entendez par "stocke un nombre binaire de 21 chiffres", vous devriez clarifier. – davidbak

+0

oui mais en utilisant non signé long long int l'ordinateur pense que c'est un int et je veux qu'il sache qu'il est binaire –

+0

ou que je pense à tort –

Répondre

2

Je voudrais avoir un type de données qui stocke un nombre binaire de 21 chiffres sur lequel je peux effectuer des opérations.

Une façon d'y parvenir est à l'aide bitset, voici un exemple de construction et l'utilisation de cet objet:

#include <iostream>  
#include <string>   
#include <bitset>   

int main() 
{ 
    std::bitset<16> foo; 
    std::bitset<16> bar (0xfa2); 
    std::bitset<16> baz (std::string("0101111001")); 

    std::cout << "foo: " << foo << '\n'; 
    std::cout << "bar: " << bar << '\n'; 
    std::cout << "baz: " << baz << '\n'; 
} 

Les impressions ci-dessus:

foo: 0000000000000000 
bar: 0000111110100010 
baz: 0000000101111001 

Cela vous donne directement accès sur la taille de la variable que vous voulez définir (dans votre cas 21 bits?), en bits, ainsi que possibilité pour les opérations binaires.

+0

Je ne peux pas utiliser% si je peux? –

+0

Voulez-vous dire fonctionnement modulo? Vous pouvez simplement vérifier le dernier chiffre, si '1' la valeur est impaire, si' 0' - la valeur est – Ziezi

+0

vous avez raison, mais je suis toujours curieux de savoir pourquoi il ne prend pas mon numéro –

1
unsigned long long int remainder=a % 10; 
a=a/10; 

Vous divisant par dix, ce qui signifie que vous traitez la valeur en tant que nombre décimal. (La constante 10 est décimale et non binaire.) 21 chiffres décimaux équivalent à environ 70 bits, ce qui explique pourquoi unsigned long long int (typiquement 64 bits) n'est pas assez large.

Remplacez 10 par 2. (Je n'ai pas vérifié pour d'autres problèmes dans votre code, mais c'est un début.)

(Vous pouvez également envisager d'utiliser des opérateurs au niveau du bit, mais la division par 2 devrait fonctionner et peut-être plus facile à comprendre pour l'instant.)