[Binaire] Question

Question [Binaire] - Divers - Programmation

Marsh Posté le 16-09-2005 à 22:41:55    

Pour ceux qui connaissent un tant sois peu le binaire, j'ai une question, quand on calcule un nombre en binaire, est-ce que si on utilise les derniers hexadécimaux (comme 1, 2, 4 et 8) est-ce qu'ils rentrent en compte dans la donnée du nombre en question, pour savoir si je me fais bien comprendre je met un exemple :
 
20 par exemple en binaire ça fait :
 
16 * 1
8 * 0
4 * 1
2* 0
1 * 0
 
Donc on aurait pour le nombre 20 en décimal, 1 0100 en binaire mais la question est, comme il y a 0 et 0 pour les deux derniers, est-ce que ça ne serait pas plutôt juste 101.
J'espère que je me suis bien fait comprendre :pt1cable:  

Reply

Marsh Posté le 16-09-2005 à 22:41:55   

Reply

Marsh Posté le 16-09-2005 à 23:10:45    

Non
Petit dev: le 1 en 3ème position (en partant de la fin) corresponds à 2^2 si tu enleves les 0 bha il correspondrais à 2^0.


Message édité par Poischack le 16-09-2005 à 23:12:24
Reply

Marsh Posté le 16-09-2005 à 23:34:49    

20 en décimal ça fait 10100 en binaire, ou même 010100 si tu veux éviter les ambiguités avec le bit de signe.
 
en décimal, 32100 et 321 c'est différent, non ?
et bien en binaire aussi. Le binaire ce n'est pas un truc extraterrestre, c'est de la base 2 et ça obéit aux même règles que la base 10. Il n'y a aucune raison pour que tu enlèves les zéro à droite.

Reply

Marsh Posté le 17-09-2005 à 00:46:11    

jesus_christ a écrit :

20 en décimal ça fait 10100 en binaire, ou même 010100 si tu veux éviter les ambiguités avec le bit de signe.
 
en décimal, 32100 et 321 c'est différent, non ?
et bien en binaire aussi. Le binaire ce n'est pas un truc extraterrestre, c'est de la base 2 et ça obéit aux même règles que la base 10. Il n'y a aucune raison pour que tu enlèves les zéro à droite.


Ok, merci. :)
Sinon c'est 0 devant le nombre pour montrer qu'il est positif mais pour montrer qu'il est negatif c'est quoi ? 1 ?

Reply

Marsh Posté le 19-09-2005 à 00:15:16    

Up !

Reply

Marsh Posté le 21-09-2005 à 08:30:57    

Oui C ça mais fo que le prog (ou la convention) qui l'utilise le reconnaisse comme tel (en clair il faut que ce bit là soit effectivement reconnu comme bit de signe...). Certain programmes utilisent également des bits pour détecter des erreurs, des dépassements, des retenues...
 
Pour revenir sur ton exemple, si en binaire 20 s'écrit 10100, si tu écrit juste 101 ça vaut 5 et plus 20 !!!

Reply

Marsh Posté le 21-09-2005 à 19:20:14    

ziold a écrit :

Oui C ça mais fo que le prog (ou la convention) qui l'utilise le reconnaisse comme tel (en clair il faut que ce bit là soit effectivement reconnu comme bit de signe...). Certain programmes utilisent également des bits pour détecter des erreurs, des dépassements, des retenues...
 
Pour revenir sur ton exemple, si en binaire 20 s'écrit 10100, si tu écrit juste 101 ça vaut 5 et plus 20 !!!


Oui d'accord mais si je met 1 devant le chiffre pour montrer qu'il est négatif ça veut aussi dire un autre nombre, donc c'est pas possible que pour montrer qu'il est négatif on doit mettre un 1 devant.
Exemple : 2 en binaire s'écrit 10 et je met donc 110 pour montrer qu'il est négatif, or 110 fait 5 normalement !!  
Donc moi je vais révolutionner le binaire en disant que si on met rien c'est qu'il est négatif, si on met 0 devant ça veut dire qu'il est positif comme ça on évite tout ambiguïté :o [:ddr555]

Message cité 1 fois
Message édité par -JoLaFouine- le 21-09-2005 à 19:20:40
Reply

Marsh Posté le 22-09-2005 à 02:34:03    

Aïe aïe aïe...
 
Les nombres sont codés dans les puces/bus/fils/etc... sous des formes normalisées. Par exemple en groupes de 8 ou 16 ou 24 ou 32 bits (ou encore autre chose).
Donc si ta machine code sur 8 bits un entier, et que le premier bit (à gauche) sert (toujours d'après la machine) à indiquer le signe de ce nombre, on en déduit que seuls 7 bits serviront à donner la valeur de ce nombre.
Par exemple 12 sera codé: 00001100
et -12 sera codé              10001100
127 sera codé      01111111
et -127 sera codé 11111111
 
Mais bon, si je me trompe pas c'est un notation qui n'est pas forcément très utilisée. On recontre plutôt la notation dite "complément à 2".
 
Enfin, tout ça ça date un peu, qu'on n'hésite pas à me frapper si je me gourre :)


Message édité par grimgroth le 22-09-2005 à 02:34:49
Reply

Marsh Posté le 22-09-2005 à 07:05:24    

-JoLaFouine- a écrit :

Oui d'accord mais si je met 1 devant le chiffre pour montrer qu'il est négatif ça veut aussi dire un autre nombre, donc c'est pas possible que pour montrer qu'il est négatif on doit mettre un 1 devant.
Exemple : 2 en binaire s'écrit 10 et je met donc 110 pour montrer qu'il est négatif, or 110 fait 5 normalement !!


Non.
 
Il y a diverses chose à prendre en compte:

  • Une variable est stockée dans un espace de taille fixe, multiple d'un octet. Actuellement, 8, 16, 32 ou 64 bits actuellement. Donc le "0" s'écrit réellement 00000000 (ou 00 en hexadécimal).


Le binaire n'est naturellement pas signé, un octet va de 0 à 255 point barre. Les hommes ayant découvert leur besoin d'utiliser des positifs et des négatifs, ils ont commencé à mettre en place des notations spécifiques sur les nombres spécifiés comme étant signés.
 
La première notation, c'est de coder un nombre précédement sur 8 bits sur seulement 7, et un nombre sur 16 bits passe à 15, ...
 
Résultat, on perd la moitié des valeurs (7bits => 0-127), mais le premier bit sert de bit de signe (là encore uniquement quand la valeur est interprétée comme signée).
 
=> si le bit "0" de l'octet est à "0" on est en positif, sinon on est en négatif. Inconvénient de la méthode, 00000000 est équivalent à 10000000 (tous deux sont égaux à "0" ), on perd une valeur "pour rien". On a donc mis en place le complément à deux: pour avoir un nombre négatif, on prend sa version positive (ex: 00000101 pour "5" ), on inverse chaque bit ce qui nous donne le complément à 1 (=> 11111010) et on ajoute "1" (=> 11111011), résultat sur 8 bits on peut représenter les valeurs de -128 à 127.
 
On notera une chose très intéressante avec le complément à deux: sommer deux nombres opposés en complément à deux donne effectivement "0"
 

 00000101
+ 11111011
1 00000000


le bit de retenue passe à "1", mais on peut parfaitement l'ignorer puisqu'il est hors limite (retenue/overflow)
 
et le bit de poids fort étant bien à "1", on a effectivement un nombre négatif (le bit de poids fort étant un indicateur de signe, mais pas un simple "bit de signe" )


Message édité par masklinn le 22-09-2005 à 07:06:12

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-12-2005 à 02:46:54    

adresse d'un convertisseur gratuit :
 
http://computer.pleug.com/pcc.htm
 
ça peut t'être utile. Il est en version 1 RC2.
 
@++


---------------
Liberty BASIC France : http://www.lbasic.fr
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed