|
|
|
|
Regarde la question sur les nombres binaire un peu plus bas, il y a une reponse expliquee la bas...
Teebo... Le droit de vote ne s'use que si l'on ne s'en sert pas... |
ben 2 c'est: 00000010
et 3 : 00000011 ^~ - sempai www.rockinjapan.fr.st |
Ca dépend pour quoi tu veux l'écrire et surtout sur quelle machine. Il faut soit que tu l'écrives soit en virgule fixe soit en virgule flotante. Et là ça dépend avec quel standard tu travailles:
Il existe la norme IEEE jesaispluscombien qui code les nombres décimaux sur 32 bits avec: le Signe est représenté par un seul bit, le bit de poids fort (celui le plus à gauche) l'Exposant est codé sur les 8 bits consécutifs au signe qui peut être positif ou négatif la Mantisse (les bits situés après la virgule) sur les 23 bits restants Avec comme forme: 1,Signe+Mantisse * 2^Exposant Ainsi pour ecrire 2,3 (soit 10,11 en binaire) tu auras: S=1 E=1 M=1011 Mais là je ne sais plus si le 1er "1" est compté ou pas dans la formule 1,SM*2^E. | ^_____________| Bref 2,3 ca fait: 10000000100000000000000000001011 (si le "1" n'est pas compté) ou: 10000000100000000000000000000011 (Mais je ne crois pas...) Bref à vérifier mais mes souvenir me font plus pencher pour la première solution. Sinon tu as la virgule fixe alors là tu définis: Le premier bit est le signe, les X suivants sont le chiffre avant la virgule et les Y derniers sont le chiffre après la virgule. C'est tout simple mais moins précis. Voila bonne chance. |
Les nombres décimaux ont rarement une équivalence exacte en binaire, et il faut en général se contenter d'une approximation.
Pour convertir, se référer aux poids binaires de chaque chiffre : - à gauche de la virgule, et de droite à gauche : - 1re chiffre : 2^0=1 - 2ème chiffre : 2^1=2 - 3ème chiffre : 2^2=4 - ...etc... - à droite de la virgule, et de gauche à droite : - 1re chiffre : 2^(-1)=0,5 - 2ème chiffre : 2^(-2)=0,25 - 3ème chiffre : 2^(-3)=0,125 - 4ème chiffre : 2^(-4)=0,0625 - ...etc... Ainsi, "2,3" en décimal peut s'écrire en binaire : - "10,01" avec une erreur de "0,05". - "10,01001" avec une erreur de "0,01875". - "10,010011" avec une erreur de "0,003125". Détail de l'exemple ci-dessus : "10,010011" = 2^(1) + 2^(-2) + 2^(-5) + 2^(-6) = "2,296875" On peut augmenter la précision en augmentant le nombre de chiffres, mais sans pour autant atteindre l'exactitude ... Philoux. |
Avec le ...,3 tu ne poura jamais atteindre l'exactitude.
Suis le raisonnement du post sur la conversion pas loin et tu arrivera a ca : 0.3=0.[01]* avec [01]* qui veut dire que le 01 est repeté en boucle. |
Tout à fait !
On a le même genre de problème en base 10 pour l'écriture de fractions du genre "10/3". Faut faire avec, ou plutôt sans (exactitude) ... Philoux. |
Salut,
je me pose une question concernant la norme IEEE dont parle TOTO, ainsi que dans la doc du site. Je ne comprend pas vraiment pourquoi le signe est à 1 pour les nombres positifs. En fait ce là m'amène à ma seconde question, avec le complément à base 2 (ou cette fois-ci le bit de signe à 1 indique une valeur positive!), je me demande comment on différencie un nb négatif d'un positif (en gros comment on sait que le poids fort est le bit de signe, ou simplement un bit "classique"). Merci de m'éclairer, je sens que je m'égare là... |
Depuis les débuts de l'informatique, et en particulier les travaux de Von Neumann (qui a retenu notamment qu'on pouvait mettre dans une mémoire binaire, indifféremment des nombres, des caractères, des instructions), les constructeurs ont choisi leurs modes de représentation, de manière arbitraire, mais on peut espérer qu'ils ont réfléchi aux implications de leur choix quant aux circuits électroniques nécessaires pour traiter les données. La base adoptée par la plupart a été finalement l'octet, utilisé seul (pour stocker un caractère), par 2 (entier court, ou instruction RR, permettant des opérations de registre à registre, parmi les 16 registres), par 4 (entier long, flottant simple précision, ou instruction avec adresse mémoire), par 6 (instruction), par 8 (flottant double précision) [cas des machines IBM]
D'autres constructeurs ont choisi une représentation sur 6 bits (= 1 caractère) et des "mots" de 36 bits. C'est donc le compilateur qui "décide" du type d'information se trouvant à telle adresse, mais comme c'est lui qui les range, il n'a pas de problème pour les retrouver. Les problèmes d'incompatibilité ... peuvent venir du programmeur (surtout avec les sous-programmes). Les compilateurs peuvent donc mélanger des instructions et des données, pour des programmes écrits en assembleur par exemple. Pour les langages évolués, le compilateur choisira de séparer les instructions des données. Cette stratégie permet de protéger le code (éviter d'écraser les instructions). Elle permet aussi d'utiliser le même code pour plusieurs exécutions en simultané, chaque process ayant ses propres données, son compteur ordinal, ses codes d'état. Pour la représentation des flottants, la caractéristique (exposant + signe de l'exposant + signe du nombre), les signes ne pouvant que "+" ou "-", il suffit d'un bit pour les coder. Avec "0" pour les nombres positifs, qui ont alors une représentation "naturelle" (cf les nombres "non signés). La "norme" (toujours IBM) a longtemps été de coder la caractéristique sur 8 bits, ce qui facilitait les conversions simple/double précision. La norme IEEE utilise des tailles différentes selon la simple/double précision. De même, certains ont choisi une représentation en base 16, d'autres une base 2, avec la "normalisation" ad'hoc. La mantisse (les chiffres significatifs) occupent tous les bits restants, sur les 32 ou 64 prévus. Pour les nombres négatifs, certains constructeurs ont pu choisir de prendre l'inverse (complément à 2) de tous les bits (caractéristique et mantisse). Pour ne pas perdre de précision (comme dans le cas du "2,3" vu plus haut), la représentation à adopter doit être du type "virgule flottante", où les chiffres sont en "décimal codé binaire" et la position de la virgule fixée par convention, ou dans une variable annexe. (cf le Cobol ) |
ok, donc en fait, tout est question de la norme utilisée. Je me posait cette question dans le cadres de tests que je v être amené à passer, où je subodore des question du genre convertissez telle valeur décimale en binaire, et inversement, etc; qui est différent du cas ou on développe soi même, en choisissant ses propres "référentiels".
en tout cas, je te remercie de ta réponse, Marden. |
aider moi s'il vous plait
comment ecrire 0.47 en fraction binaire de 8 bits merci |
Bonjour,
Comment écrit on 19 en base 2 ??? merci |