2010-11-08 5 views
0

1) Je comprends que lorsque vous convertissez binaire en décimal, le bit le plus à gauche représente 0, 1 ... ainsi de suite. Donc par exemple pour convertir 0001 en décimal, il est 0 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3 donc la valeur décimale serait 8.Une question concernant la conversion binaire en hexadécimal pour les octets signés

2) Par exemple, vous avez signé hex 0x80 qui sera converti en binaire 1000 0000 mais pour calculer la valeur décimale de cette représentation binaire, il est signé, donc nous devons inverser 7 bits donc nous obtenons 1111111 et ajouter 1 qui nous donne 10000000 qui est - 128 Ma question est pourquoi dans le second cas, lorsque nous calculons la décimale pour l'octet signé, nous avons dû partir de la plupart des bits de droite comme 0, donc nous avons .... + 1 * 2^8. Pourquoi le 2^0 n'est-il pas le bit le plus à gauche comme nous l'avons calculé en 1) pour le second cas?

Merci.

Répondre

2

je réponds au point 1, pas tout à fait. 0001 est réellement 1 tandis que 1000 est 8. Vous semblez provenir de la mauvaise fin. Le nombre binaire 1101, par exemple serait:

+------ 1 * 2^3  = 8 
|+----- 1 * 2^2  = 4 
||+---- 0 * 2^1  = 0 
|||+--- 1 * 2^0  = 1 
||||     -- 
1101    = 13 

Pour le point 2, la meilleure façon de transformer un modèle binaire en un nombre signé est d'abord la transformer en une valeur non signée (0x80 = 128), puis soustrayez la polarisation (256 pour huit bits, 65536 pour 16 bits et ainsi de suite) pour obtenir -128.

La polarisation ne doit affecter le calcul à la fin du processus, il y a un moyen pour cartographier la gamme 0..255 à -128..127, ou 0..65535--32768..32767.

4

Non, généralement binaire est dit dans l'autre sens ... 0001 est 1, 1000 est 8.

Questions connexes