Ecrire une fonction pour convertir une base

Bonjour,

Je dois rendre un exercice qui dit : Écrire une fonction qui prend en paramètres un entier relatif r exprimé en base dix et un entier naturel non nul n et renvoie le codage de r sur n bits. Le résultat renvoyé est de type str.

Je n’y arrive absolument pas car je ne comprends pas .

Pouvez vous m’aider svp ?

Merci

Pour quel langage et quelle plate-forme ?

Je présume qu’il s’agit d’un convertisseur décimal/binaire.

Tu dois donc te pencher :

  • sur la conversion d’une valeur décimale en binaire
  • sur la création d’une chaîne de caractères â partir d’une valeur binaire
  • sur le formatage d’une chaîne de caractères puisque la taille finale est imposée

ATTENTION : le libellé même de la question cache un problème potentiel qu’il faut absolument prendre en compte : la non cohérence des paramètres !

Forcer la taille du résultat final, c’est dangereux si à la suite d’une erreur, la chaîne contenant le résultat binaire est plus grande que le formatage imposé. Ta fonction doit vérifier ce cas de figure et avoir un moyen d’avertir le programme appelant qu’il y a un problème.

Les variables optionnelles ? sont parfaites pour ça en Swift. Mais ce n’est peut-être pas ton langage de programmation.

Édit : je viens d’y penser, il y a une grosse subtilité dans l’énoncé. Un nombre relatif, c’est un nombre naturel (1 brique, 2 chats, 3 pommes, etc …), avec un signe devant pour dire si c’est positif ou négatif (il me manque deux pommes pour préparer ma tarte, mon solde est donc de -2 pommes).

Mais les nombres binaires sont des entiers positifs par nature. On peut bien évidemment stocker des valeurs négatives en représentation binaire, mais en ajoutant une information supplémentaire pour indiquer si c’est une valeur positive ou négative.

La technique habituelle est dite du complément à deux, ajouter un bit supplémentaire à la gauche du nombre binaire, pour exprimer son signe. Il y a quelques contraintes, notamment que tous les valeurs doivent avoir le même nombre de bits, mais c’est justement l’une des conditions de l’exercice (et ce n’est certainement pas un hasard !).

Concrètement si la fonction doit calculer la représentation binaire d’un nombre sur 16 bits, en fait c’est 15 bits pour la valeur et un bit pour le signe !

Par convention, le bit de signe vaut 0 pour les valeurs positives, et 1 pour les valeurs négatives.

C’est plus clair dans ton esprit ?