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 ?
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.)
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.
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).
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.
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.)
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
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.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.