codage en mémoire d'un nbr signé - C++ - Programmation
Marsh Posté le 17-12-2002 à 14:20:38
Le plus à gauche.
Si unsigned, on va de 0000 0000 à FFFF FFFF.
Si signé, positif de 0000 0000 à 7FFF FFFF et négatif de 8000 0000 à FFFF FFFF.
C'est pourquoi un int non signé 16 bits (j'y suis resté ) va de 0 à 65535, signé de -32768 à +32767 (sauf erreur, de tête, suis pas du métier).
EDIT : pour les float, double,.. je sais plus trop, y a mantisse et exposant => faut voir le détail, ça devrait être analogue, sauf que c'est par tronçons (signe de mantisse, signe d'exposant).
Marsh Posté le 17-12-2002 à 14:31:31
la sur 16 bits c un short, un int depend de l'implementation
Marsh Posté le 17-12-2002 à 14:32:44
en signé : FF FF FF FF correspond à -1 ou à -max ?
Marsh Posté le 17-12-2002 à 20:14:20
tout ça n'est pas défini par la norme: tout depend du système : de son endianess et du codage empoyé (complement à 2 dans la majorité des cas, mais ca peut etre complément à 1, etc...) toutes les specifications disponibles sont dans climits et limits
Marsh Posté le 17-12-2002 à 21:51:40
Sur PC, c'est le complément à 2. C'est à dire que, pour convertir, tu inverses et tu ajoutes 1.
Par exemple, pour calculer -1 :
1 (en hexa) : 00000001
en inversant : 11111110
+1 : 11111111
Si tu refais la même opération en partant de -1, ca marche bien. Aussi pour 0
Marsh Posté le 18-12-2002 à 05:45:49
En prenant un hypotétique entier de 3 bits, avec les représentaions la plus classique, voici une table des valeurs:
Représentation binaire, poids faible à droite |
Il y a bouclage entre le haut et le bas si on dépasse.
Signé, complément à 2:
Le bit de gauche n'est à 1 que pour des valeurs négatives.
0 est considéré positif.
Avantage: l'addition/soustraction de nombres est identique, qu'ils soient négatifs ou positifs.
Signé, bit de signe:
Le bit de gauche est le signe, indépendamment du reste.
Avantage: la valeur absolue est directement lisible.
Inconvénient: cas -0 à priori inutile et même encombrant.
Marsh Posté le 18-12-2002 à 08:35:04
merci bcp ca c super clair
Marsh Posté le 17-12-2002 à 13:54:08
Bonjour,
j'ai un gros pb sur une base du c :
comment est codé un nombre signé ne mémoire (sur pc) ?
prenons comme exemple un long : codé sur 4 octets
si il n'est pas signé, ds le mémoire:
0 correspondra à 00 00 00 00,
1 correspondra à 01 00 00 00,
et le maximum à : FF FF FF FF.
mais comment cela se passe-t-il si il est signé ?
je suppose que 0 sera tjs 00 00 00 00, mais -1 ?
il me semble avoir un vague souvenir d'un bit pour le signe, mais je ne sais plus lequel c'est ...
---------------
-( BlackGoddess )-