Tableau de conversion Décimales à un tableau de chiffres binaires

voix
2

Ceci est probablement une question tout à fait exotique.

Mon problème est le suivant:

La TI 83+ calculatrice graphique vous permet de programmer sur l'aide soit de montage et un câble de liaison à un ordinateur ou son langage intégré de programmation TI-BASIC.

D'après ce que j'ai trouvé, il ne supporte que 16 bits Entiers et certains flotteurs émulés.

Je veux travailler avec un peu plus grand nombre cependant (environ 64 bits), donc pour que j'utilise un tableau avec un seul chiffre:

{1, 2, 3, 4, 5}

serait la décimale 12345.

En binaire, c'est 110000 00111001, ou un tableau de chiffres binaires:

{1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1}

qui serait comment la calculatrice affiche.

Comment pourrais-je aller sur la conversion de ce tableau de chiffres décimaux (qui est trop grand pour la calculatrice pour l'afficher comme un type natif) dans un tableau de chiffres décimaux?

L'efficacité est pas un problème. Ce n'est pas devoirs.

Cela me laisser libre de mettre en œuvre l'ajout de tels tableaux et autres.

Merci!

Créé 01/11/2009 à 13:10
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

Le principal problème ici est que vous allez entre les bases qui ne sont pas des multiples de l'autre, et donc il n'y a pas isolé mappage direct entre les chiffres d'entrée et les chiffres de sortie. Vous allez probablement devoir commencer par votre chiffre le moins significatif, sortie autant de chiffres les moins significatifs de la sortie que vous pouvez avant que vous devez consulter le chiffre suivant, et ainsi de suite. De cette façon, vous ne devez avoir au plus deux de vos chiffres d'entrée en cours d'examen à un moment donné dans le temps.

Vous trouverez peut-être avantageux en termes d'ordre de traitement pour stocker vos numéros sous forme inversée (tels que les chiffres les moins significatifs viennent d'abord dans le tableau).

Créé 01/11/2009 à 13:19
source utilisateur

voix
1

PRIVER et je pense que je le ferais avec ce qui suit « algorithme »

  • vérifier le dernier chiffre (5 dans le cas de l'exemple)
  • si elle est impaire, stocker (de l'ordre inverse) un 1 dans la matrice binaire

  • maintenant diviser le nombre par 2 par la méthode suivante:

  • commencer par le premier chiffre et effacer la variable « carry ».
  • diviser par 2 et ajouter la variable « carry ». Si le reste est 1 (vérifier avant de faire la fracture avec un et & 1) puis mettre 5 dans le transport
  • répéter jusqu'à ce que tous les chiffres ont été réalisés

répéter les deux étapes à nouveau jusqu'à ce que le nombre entier est réduit à 0..

le numéro dans votre tableau binaire est la représentation binaire

votre exemple: 1,2,3,4,5

  • 5 est étrange si nous hébergerons 1 dans le tableau binaire: 1
  • on divise le tableau en 2 en utilisant l'algorithme:
  • 0,2,3,4,5 => 0,1 + 5,3,4,5 => 0,6,1,4,5 => 0,6,1,2 + 5,5 => 0, 6,1,7,2

et répétez:

0,6,1,7,2 dernier chiffre est même si nous enregistrons un 0: 0,1 (avis que nous remplissons la chaîne binaire de droite à gauche)

etc

vous vous retrouvez avec un binaire

EDIT: Juste pour préciser ci-dessus: Tout ce que je fais est l'âge ancien algorithme:

 int value=12345;
 while(value>0)
 {
      binaryArray.push(value&1);
      value>>=1;     //divide by 2
 }

sauf dans votre exemple, nous ne disposons pas d'un int, mais un tableau qui représente une (base 10) int; ^)

Créé 01/11/2009 à 14:02
source utilisateur

voix
0

Sur le chemin serait de convertir chaque chiffre dans la représentation décimale à sa représentation binaire, puis ajoutez les représentations binaires de tous les chiffres:

5 = 101
40 = 101000
300 = 100101100
2000 = 11111010000
10000 = 10011100010000

             101
          101000
       100101100
     11111010000
+ 10011100010000
----------------
  11000000111001

Preuve de concept en C #:

Des procédés pour la conversion d'un tableau de chiffres binaires, en ajoutant des tableaux et en multipliant une matrice par dix:

private static byte[] GetBinary(int value) {
  int bit = 1, len = 1;
  while (bit * 2 < value) {
    bit <<= 1;
    len++;
  }
  byte[] result = new byte[len];
  for (int i = 0; value > 0;i++ ) {
    if (value >= bit) {
      value -= bit;
      result[i] = 1;
    }
    bit >>= 1;
  }
  return result;
}

private static byte[] Add(byte[] a, byte[] b) {
  byte[] result = new byte[Math.Max(a.Length, b.Length) + 1];
  int carry = 0;
  for (int i = 1; i <= result.Length; i++) {
    if (i <= a.Length) carry += a[a.Length - i];
    if (i <= b.Length) carry += b[b.Length - i];
    result[result.Length - i] = (byte)(carry & 1);
    carry >>= 1;
  }
  if (result[0] == 0) {
    byte[] shorter = new byte[result.Length - 1];
    Array.Copy(result, 1, shorter, 0, shorter.Length);
    result = shorter;
  }
  return result;
}

private static byte[] Mul2(byte[] a, int exp) {
  byte[] result = new byte[a.Length + exp];
  Array.Copy(a, result, a.Length);
  return result;
}

private static byte[] Mul10(byte[] a, int exp) {
  for (int i = 0; i < exp; i++) {
    a = Add(Mul2(a, 3), Mul2(a, 1));
  }
  return a;
}

Conversion d'un tableau:

byte[] digits = { 1, 2, 3, 4, 5 };

byte[][] bin = new byte[digits.Length][];
int exp = 0;
for (int i = digits.Length - 1; i >= 0; i--) {
  bin[i] = Mul10(GetBinary(digits[i]), exp);
  exp++;
}
byte[] result = null;
foreach (byte[] digit in bin) {
  result = result == null ? digit: Add(result, digit);
}

// output array
Console.WriteLine(
  result.Aggregate(
    new StringBuilder(),
    (s, n) => s.Append(s.Length == 0 ? "" : ",").Append(n)
  ).ToString()
);

Sortie:

1,1,0,0,0,0,0,0,1,1,1,0,0,1

Modifier:
Ajout des méthodes pour multiplier un tableau par des dizaines. Intead de la multiplication du chiffre avant de le convertir en une matrice binaire, il doit être fait à la matrice.

Créé 01/11/2009 à 14:23
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more