Question

Je sais comment convertir binaire en décimal. Je sais au moins 2 méthodes: table et alimentation; -)

Je veux convertir binaire en décimal et imprimer cette décimale. De plus, je ne suis pas intéressé par cette DECIMAL '; Je veux juste l'imprimer.

Mais, comme je l'ai écrit plus haut, je ne connais que deux méthodes pour convertir binaire en décimal et les deux nécessaires plus. Donc, je suis pour calculer une valeur 1 ou 0 en binaire et l'ajouter à la valeur mémorisée. C'est un endroit mince. J'ai un nombre très-très grand (1 et 64 zéros). Lors de la conversion que je dois placer un résultat intermédiaire dans une « variable ». En C, j'ai un type 'int », qui est de 4 octets seulement et pas plus de 10 ^ 11.

Alors, je n'ai pas assez de mémoire pour stocker résultat intermedite lors de la conversion de binaire en décimal. Comme je l'ai écrit plus haut, je ne suis pas intéressé par cette décimale, je veux juste imprimer le résultat. Mais, je ne vois pas d'autres façons de le résoudre ;-( est-il une solution à « imprimer juste » de binaire?

Ou, peut-être, je devrais utiliser pour la représentation intermédiaire quelque chose comme BCD (Binary Coded Decimal)? Je ne veux pas vraiment l'utiliser, parce que ce n'est pas multi-plateforme (les processeurs d'Intel ont une fonction intégrée, mais pour d'autres, je vais devoir écrire propre implémentation).

Je voudrais heureux d'entendre vos pensées. Merci pour la patience.

Langue:. C

Était-ce utile?

La solution

Biggest type de données standard intégral est unsigned long long int - sur mon système (32 bits Linux sur x86), il a une portée de 0 à 1,8 * 10 ^ 20 qui ne suffit pas pour vous, vous devez créer votre propre type (struct ou tableau) et écrire les mathématiques de base (fondamentalement, vous avez juste besoin d'un ajout) pour ce type.

Si je vous (et la mémoire n'est pas un problème), j'utiliser un tableau - un octet par chiffre décimal plutôt que BCD. BCD est plus compact car il stocke 2 chiffres décimaux par octet, mais vous avez besoin de mettre beaucoup plus d'efforts à travailler avec des amuse-gueules haut et bas séparément.

Et pour vous imprimer ajouter juste '0' (caractère, non chiffres) à chaque octet de votre tableau et vous obtenez une chaîne imprimable.

Autres conseils

Je recommande fortement d'utiliser une bibliothèque tels que GMP (bibliothèque GNU Multiprécision). Vous pouvez utiliser le type de données mpz_t pour les grands entiers, les différents routines d'import / export pour obtenir vos données dans un mpz_t, puis utilisez mpz_out_str() pour l'imprimer en base 10.

Eh bien, lors de la conversion de binaire en décimal, vous ne vraiment pas besoin de tous les bits binaires en même temps. Vous avez juste besoin les bits vous calculez actuellement la puissance de et probablement une double variable pour tenir les résultats. Vous pouvez mettre la valeur binaire dans un tableau, permet de dire que je [64], itérer, obtenir la puissance en fonction de sa position et continuer à ajouter au double.

Conversion en décimal vraiment un moyen de calcul de chaque puissance de dix, alors pourquoi ne pas simplement stocker ceux-ci dans un tableau d'octets? Ensuite, l'impression est juste en boucle à travers le réseau.

Ne pourriez-vous allouer de la mémoire pour, disons, 5 int de et stocker votre numéro au début du tableau? Ensuite itérer manuellement sur le tableau en morceaux int taille. Peut-être quelque chose comme:

int* big = new int[5];
*big = <my big number>;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top