![]() |
| Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé. | |||||||
|
|||||||
| Assembleur Forum d'entraide Assembleur. Avant de poster -> F.A.Q Assembleur Tutoriels Assembleur |
![]() |
|
|
Outils de la discussion |
|
|
#1 (permalink) | ||
|
Invité régulier
![]() Date d'inscription: août 2008
Âge: 15
Messages: 11
|
Bonsoir à tous,
Voilà, je suis nouveau en informatique et je désire savoir comment on peut coder les nombres décimaux et négatifs en binaire. J'ai lu dans un des tutos de developpez.com que pour changer un nombre en négatif il fallait juste inverser tous les bits et ajouter 1 au résultat; autrement dit Citation:
Dans son exemple il a travaillé avec le nombre 14 Citation:
Merci de m'expliquer un peu plus comment faire pour les négatifs et les décimaux ou de me donner un lien concernant ce que je cherche Merci d'avance pour toute réponse Désolé si ce n'est pas la partie concernée du forum j'ai cherché mais je n'ai rien trouvé en ce qui concerne le binaire Dernière modification par Alcatîz ; 26/08/2008 à 21h57 Motif: orthographe |
||
|
|
|
|
|
#2 (permalink) |
|
Membre éprouvé
![]() Date d'inscription: juillet 2007
Localisation: Belgique
Messages: 410
|
La représentation décimale tu veux dire. Si tu veux afficher un entier signé il suffit d'afficher un moins si le nombre est négatif (si le bit signe est égal à 1), puis tu affiches la valeur absolue.
__________________
:wq |
|
|
|
|
|
#3 (permalink) |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Il s'agit surtout de savoir si tu considères que ton nombre binaire est signé ou non signé. D'où les fameux types en C. Le problème, en réalité est fort simple : il suffit de prendre en exemple un compteur kilométrique.
Si tu achètes une voiture neuve et que son compteur affiche « 00000 », si tu fais un kilomètre en marche arrière, le compteur affichera « 99999 » (en considérant bien sûr que le dispositif n'est pas protégé contre ce genre de bidouille). Ton « 99999 » peut donc être interprété comme un « -1 ». Donc soit, tu considères que tes kilomètres sont toujours positifs et tu peux compter de 0 à 99999, soit tu considères que tu peux avoir des nombres positifs et négatifs et dans ce cas, tu coupes le tableau en deux : les valeurs de 00000 à 49999 sont positives, et celle de 50000 à 99999 sont en fait les valeurs négatives obtenues en « partant de l'autre sens ». Donc si le chiffre le plus à gauche de ton compteur est compris entre 0 et 4, ton nombre est positif, s'il est compris entre 5 et 9, c'est en fait un nombre négatif. Ça tombe bien : en binaire, un chiffre ne peut prendre que deux valeurs. Donc si ton bit de poids fort est nul -> positif, à un -> négatif. Le bit de poids fort d'un nombre est donc considéré comme le signe d'un binaire signé. Pour les parties rationnelles, c'est comme en décimal, où chaque chiffre vaut dix fois moins que son voisin de gauche. Le premier chiffre après la virgule vaut donc n/10, le second n/100, le troisième n/1000, etc. Rien ne t'empêche de faire la même chose en binaire en posant la virgule ou tu veux. Format à « virgule fixe », donc. Les bits à droite de cette virgule vaudront alors respectivement 1/2, 1/4, 1/8, 1/16 ... Ça, c'est pour le binaire naturel. En revanche, pour coder des nombres à virgules en informatique, on utilise le format dit « à virgule flottante » (le fameux float). Là, par contre, c'est complètement artificiel : on prend un champ de taille fixe (généralement 32 ou 64 bits), et on réserve un bit pour le signe (indépendament du nombre), quelques bits (huit pour un float32) pour l'exposant (2 puissance n) qui, en gros, va dire où se trouve la virgule par rapport à ton champ, et le reste pour la valeur elle-même. Il s'agit toujours de la valeur absolue du nombre, indépendament du bit de signe. Pas de complémentation ici. Ce format s'est répandu très vite partout, mais pendant très longtemps, il n'y a pu être traité que logiciellement. Il a fallu attendre les coprocesseurs mathématiques sur PC pour qu'ils soient enfin traités par un circuit dédié. |
|
|
|
|
|
#4 (permalink) |
|
Invité régulier
![]() Date d'inscription: août 2008
Âge: 15
Messages: 11
|
Premièrement merci a vous pour vos réponses et surtout a toi Obsidian.
Puis je voudrait savoir comment l'ordinateur ou plus présisément le processeur peu faire la différence entre -14 et 242 pour le code 11110010 ? Autre question : existe il des cours dédier (principalement) a apprendre le principe des différents type de nombres en binaire si oui merci de me l'indiquer. |
|
|
|
|
|
#5 (permalink) | |
|
Expert Confirmé Sénior
![]() ![]() Date d'inscription: novembre 2005
Messages: 3 870
|
Citation:
En gros, il y a trois types de langages: - les langages statiquement types, ou on donne un type aux variables et c'est ce type qui indique comment il faut interprete une sequence de bits (p.e. en C si tu declares ta variable signed char, si son contenu exprimee en binaire est 11110010, il faut l'interprete comme -14; si tu declares la variable unsigned char, pour le meme contenu il faut l'interprete comme 242). - les langages types dynamiquement; ce sont les valeurs qui portent une indication de leur type; tu n'auras pas de variable dont le contenu est simplement 11110010, le contenu d'une variable a deux parties: une marque de type et la representation. - les langages non types, ou ce sont les instructions qui indiquent la maniere dont il faut interpreter les suites de bits; les assembleurs sont dans ce cas comme des langages plus vieux (les plus connus sont BCPL et BLISS, mais ceux qui les connaissent reellement commencent a avoir des cheveux blancs)
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
|
|
|
|
#6 (permalink) | |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Citation:
Pour être plus précis, les mécanismes qui font les calculs sont les mêmes. C'est généralement à l'interprétation du résultat que la différence va se faire. Par exemple, ja (Jump if Above) examine le résultat en partant du principe que les nombres étaient non-signés, tandis que jg (Jump if Greater) va faire la même chose mais en les considérant comme signés. À chaque opération logique ou arithmétique, des flags sont positionnés indépendament les uns des autres. Par exemple « Z », qui est un indicateur de zéro. Ce flag vaut un si le résultat de la dernière opération était nul. En examinant ces flags, ainsi que la retenu. On peut en déduire toutes sortes de choses. Il suffit donc de conditionner des sauts sur l'état de ces bits. |
|
|
|
|
|
|
#7 (permalink) |
|
Expert Confirmé Sénior
![]() ![]() Date d'inscription: novembre 2005
Messages: 3 870
|
Il y a un monde en dehors des PC. Il y a des ordinateurs interpretant en hard les flottants depuis les annees 40.
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
|
|
|
#9 (permalink) | |
|
Expert Confirmé Sénior
![]() ![]() Date d'inscription: novembre 2005
Messages: 3 870
|
Citation:
__________________
Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça. |
|
|
|
|
|
|
#10 (permalink) | |
|
Membre expérimenté
![]() Date d'inscription: septembre 2007
Localisation: Évry
Âge: 32
Messages: 544
|
Citation:
Mais je crois qu'on est d'accord. |
|
|
|
|
|
![]() |
![]() |
||
Les nombres négatifs et décimaux en binaire
|
||
| Outils de la discussion | |
|
|