codage en mémoire d'un nbr signé

codage en mémoire d'un nbr signé - C++ - Programmation

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 )-
Reply

Marsh Posté le 17-12-2002 à 13:54:08   

Reply

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é :D) 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).


Message édité par Carbon_14 le 17-12-2002 à 14:22:41
Reply

Marsh Posté le 17-12-2002 à 14:31:31    

la sur 16 bits c un short, un int depend de l'implementation


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-12-2002 à 14:32:44    

en signé : FF FF FF FF correspond à -1 ou à -max ?


---------------
-( BlackGoddess )-
Reply

Marsh Posté le 17-12-2002 à 17:28:26    

a -1


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-12-2002 à 17:52:22    

ok, mci a vs 2 :)


---------------
-( BlackGoddess )-
Reply

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


---------------
du bon usage de rand [C] / [C++]
Reply

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 :)


Message édité par mrbebert le 17-12-2002 à 21:52:45
Reply

Marsh Posté le 17-12-2002 à 22:40:29    

ok, super, merci :)


---------------
-( BlackGoddess )-
Reply

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
  |    Non signé
  |    |   Signé, complément à 2
  |    |   |   Signé, bit de signe
 000   0   0   0
 001   1   1   1
 010   2   2   2
 011   3   3   3
 100   4  -4  -0
 101   5  -3  -1
 110   6  -2  -2
 111   7  -1  -3

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.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 18-12-2002 à 05:45:49   

Reply

Marsh Posté le 18-12-2002 à 08:35:04    

merci bcp :) ca c super clair :)


---------------
-( BlackGoddess )-
Reply

Sujets relatifs:

Leave a Replay

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