Partage
  • Partager sur Facebook
  • Partager sur Twitter

Une petite question sur le BCD

Sujet résolu
    16 août 2019 à 17:21:57

    Bonjour à tous,

    Je travaille actuellement sur un exercice de C ayant pour sujet le BCD. On demande, en considérant que chaque digit soit codé sur 8 bits, de définir le type BCD100 qui permet de représenter un nombre BCD ayant une taille fixe de 100 digits, puis de définir le type BCDX permettant de représenter un nombre BCD de taille quelconque.

    Je suppose qu'il faut démarrer par un typedef mais je ne vois pas comment faire le reste. Pouvez-vous me donnez un petit coup de pouce s'il vous plaît ? 

    Merci d'avance,

    Thibaut DUCROCQ.

    • Partager sur Facebook
    • Partager sur Twitter
      16 août 2019 à 18:25:45

      Pourquoi pas un tableau pour BCD100?
      • Partager sur Facebook
      • Partager sur Twitter
        16 août 2019 à 18:35:42

        J'y ai pensé,

        du coup comme il y a 100 digits, et que chaque digit est représenté sur 8 bits, ça pourrait être :

        typedef int BCD100[100][8]

        ou 

        typedef int BCD100[800]

        • Partager sur Facebook
        • Partager sur Twitter
          16 août 2019 à 19:12:46

          Le typedef, cest vraiment la dernière chose à considérer...
          • Partager sur Facebook
          • Partager sur Twitter
            16 août 2019 à 19:44:07

            ThibautDucrocq a écrit:

            du coup comme il y a 100 digits, et que chaque digit est représenté sur 8 bits, ça pourrait être :

            typedef int BCD100[100][8]

            Ça ferait 8 'int' pour représenter un seul chiffre ? C'est-à-dire 32 octets ? Au lieu de 1 octet ? (D'ailleurs il me semblait que c'était 4 bit par chiffre, non ?)

            A priori je serais tenté d'utiliser plutôt des 'unsigned char'. (Si c'est 4 bit par chiffre, comme ce qu'on m'a appris, un 'unsigned char' permet de coder 2 chiffres. Si la variable s'appelle x, le premier chiffre est x/16 et le second chiffre est x%16 il me semble. Et il est sûrement plus efficace d'utiliser des décalages de bits pour les extraire plus efficacement.)

            -
            Edité par robun 16 août 2019 à 19:44:49

            • Partager sur Facebook
            • Partager sur Twitter
              16 août 2019 à 20:30:42

              ThibautDucrocq a écrit:

              J'y ai pensé,

              du coup comme il y a 100 digits, et que chaque digit est représenté sur 8 bits, ça pourrait être :

              typedef int BCD100[100][8]

              ou 

              typedef int BCD100[800]

              Tout a été dit plus haut, mais ne confondrais-tu pas bit et byte? Dans la quasi totalité des cas, un byte = 8 bits, donc un tableau de 10 byte est suffisant.

              Le seul type garantissant une taille de 8 bits est le type char, ou plus précisément unsigned char pour ton problème.

              Je rejoins robun pour le codage d'un digit BCD: en principe c'est 4 bits, donc un demi octet. mais puisque ton énoncé précise que chaque digit est codé dans un octet, on va faire avec.

              • Partager sur Facebook
              • Partager sur Twitter
                16 août 2019 à 22:27:14

                Merci pour vos réponses,

                J'ai fait une erreur rédigeant le premier poste, chaque digit est codé sur 1 octet. C'est écrit comme cela dans l'intitulé de la question. 

                Encore merci, bonne soirée !

                • Partager sur Facebook
                • Partager sur Twitter
                  16 août 2019 à 23:18:01

                  ThibautDucrocq a écrit:

                  J'ai fait une erreur rédigeant le premier poste

                  Quelle erreur?

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 août 2019 à 1:35:30

                    Bonjour

                    Moi aussi j'ai appris que BCD veut dire Binary Coded Decimal et je le conçoit sur 4 bits.

                    Si son problème exige un seul digit BCD par octet, moi aussi je vote pour unsigned char BCD 100[100]

                    Pour son BCDX, il faut voir comment il traite la chose … utiliser malloc?

                    Sait-il a l'avance la longueur de son nombre?

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Le Tout est souvent plus grand que la somme de ses parties.

                      17 août 2019 à 7:45:24

                      Bonjour, 

                      Pour BCDX, c'est écrit : 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        17 août 2019 à 7:54:25

                        Ah, l'énoncé donne déjà une piste. (OK, 8 bits par chiffre.) Le type BCDX est donc probablement une structure contenant deux champs : le nombre de chiffres, et un tableau (je dirais de unsigned char) ayant ce nombre d'éléments (probablement alloué avec malloc).
                        • Partager sur Facebook
                        • Partager sur Twitter
                          17 août 2019 à 15:39:28

                          Pour BCDX, une structure avec une partie longueur et un tableau dynamique pour les digits.

                          On aurait pu envisager une solution correspondant aux chaines du pascal qui stocke la longueur dans son premier octet, mais ça aurait limité la longueur à 255 digit alors que l'énoncé spécifie une taille quelconque.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            17 août 2019 à 18:04:04

                            Bonjour

                            Tout cela m'amène à une réflexion sur les termes associés aux nombres dans un ordinateur.

                            On parle de bit, byte, octet, digit, chiffre, caractère, nombre et on ajoute digit BCD.

                            Est-ce que j'en ai oublié? Il faudrait un petit glossaire pour les débutants.

                            Pour ajouter à la confusion, ajoutons big-endian et little-endian sans oublier avec ou sans signe ([un]signed)

                            Tant qu'à y être, on peut mentionner les représentations entières (char?, short, int, long, long, long long), flottantes (float, double).

                            Sans oublier l'arithmétique avec complément à un ou à deux.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le Tout est souvent plus grand que la somme de ses parties.

                              18 août 2019 à 7:18:24

                              Oui mais là tu élargis drôlement le sujet.

                              Pour ne pas embrouiller les gens, on pourrait déjà parler français : chiffre plutôt que digit, octet plutôt que byte (sauf si on tombe sur de vieilles machines où un byte fait 7 ou 9 bits). Bien sûr, il faut toujours connaître leur équivalent en anglais afin d'être capable de lire la doc. (On pourrait même imaginer avoir de temps en temps un énoncé en anglais.)

                              • Partager sur Facebook
                              • Partager sur Twitter
                                18 août 2019 à 17:50:16

                                Ce n'est pas moi qui ai introduit le terme BCD dans ce post. Je vois continuellement le terme byte dans les sujets de ce forum.

                                De plus, la définition de byte semble varier d'une personne à l'autre. On ne sait pas toujours ce que la personne demande.

                                J'ai connu de vieilles machines où on appelait byte les six bits consécutifs formant un caractère (il y avait seulement 64 caractères).

                                Existe-t-il un site officiel où on trouverait la bonne définition de tous ces termes (en français et en anglais).

                                Cela pourrait nous servir de référence.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Le Tout est souvent plus grand que la somme de ses parties.

                                  18 août 2019 à 17:58:16

                                  Oui, c'est l'énoncé de l'exercice de Thibaut qui utilise de l'anglais (BCD et « digit »). Cela dit il parlait d'octets, donc il n'y avait pas d'ambiguïté sur le nombre de bits.

                                  La définition de « byte » dépend des machines, car dans les anciens ordinateurs on pouvait avoir des bytes de 7, 8 ou 9 bits, et même 6 d'après ton témoignage. C'est pour que le terme « octet » n'est pas une traduction 100 % fidèle. Mais c'est de l'histoire ancienne, aujourd'hui les bytes font 8 octets et on peut donc utiliser le terme « octet ».

                                  -
                                  Edité par robun 18 août 2019 à 18:00:02

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Une petite question sur le BCD

                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                  • Editeur
                                  • Markdown