42 votes

En notation binaire, quelle est la signification des chiffres après le point de base "."?

J'ai cet exemple sur la façon de convertir un numéro de base 10 en représentation float IEEE 754

 Number: 45.25 (base 10) = 101101.01 (base 2) Sign: 0
Normalized form N = 1.0110101 * 2^5
Exponent esp = 5  E = 5 + 127 = 132 (base 10) = 10000100 (base 2)
IEEE 754: 0 10000100 01101010000000000000000
 

Cela a du sens pour moi sauf un passage:

 45.25 (base 10) = 101101.01 (base 2)
 

45 est 101101 en binaire et c'est correct .. mais comment ont-ils obtenu le 0,25 en tant que .01?

125voto

Carl Norum Points 114072

Simple lieu de la valeur. En base 10, vous avez un de ces endroits:

... 103 102 101 100. 10-1 10-2 10-3 ...

... des milliers, de centaines, de dizaines, de ceux . dixièmes, centièmes, millièmes ...

De même, en binaire (base 2), vous avez:

... 23 22 21 20. 2-1 2-2 2-3 ...

... huit, quatre, deux, une . moitiés, quarts, huitièmes ...

Donc la deuxième place après l' . en binaire est les unités de 2-2, bien connu de vous que les unités de 1/4 (ou alternativement, 0.25).

30voto

mkataja Points 634

Vous pouvez convertir la partie après le point décimal à une autre base de façon répétée, en multipliant par la nouvelle base (dans ce cas, la nouvelle base est 2), comme ceci:

0.25 * 2 = 0.5

-> Le premier chiffre binaire 0 (prendre la partie entière, c'est à dire la partie avant la virgule).

Continuer en multipliant la partie après la virgule:

0.5 * 2 = 1.0

-> Le deuxième chiffre binaire est de 1 (encore une fois, de prendre la partie entière).

C'est aussi l'endroit où nous arrêter parce que la partie après la virgule est maintenant à zéro, donc il n'y a rien de plus à se multiplier.

Donc la dernière représentation binaire de la partie fractionnaire est: 0.012.

Edit:

Pourrait également être intéressant de noter que c'est assez souvent que la représentation binaire est infini, même en partant avec une durée de partie fractionnaire en base 10. Exemple: conversion de 0,2à 10 en binaire:

0.2 * 2 = 0.4   ->   0
0.4 * 2 = 0.8   ->   0
0.8 * 2 = 1.6   ->   1
0.6 * 2 = 1.2   ->   1
0.2 * 2 = ...

On se retrouve donc avec: 0.001100110011...2.

En utilisant cette méthode, vous voir assez facilement si la représentation binaire finit l'infini.

13voto

Mooing Duck Points 27497

"Décimales" (les fractions de bits) dans les autres bases sont étonnamment peu intuitive, étant donné qu'il fonctionne exactement de la même manière que les nombres entiers.

base 10
scinot 10e2  10e1  10e0 10e-1 10e-2 10e-3
weight 100.0 10.0   1.0  0.1   0.01  0.001
value  0     4      5     .2      5      0

base 2
scinot 2e6 2e5 2e4 2e3 2e2 2e1 2e0 2e-1 2e-2 2e-3
weight 64  32  16   8   4   2   1   .5   .25 .125
value   0   1   0   1   1   0   1   .0    1    0   

Si nous commençons avec 45.25, qui est plus grand ou égal à 32, de sorte que l'on ajoute un 1 binaire, et soustraire 32.
Nous sommes à gauche avec 13.25, qui est plus petit que 16 ans, donc nous avons ajouter un 0 binaire.
Nous sommes à gauche avec 13.25, qui est plus grand ou égal que 8, nous avons donc ajouter un 1 binaire, et soustraire 8.
Nous sommes à gauche avec 05.25, qui est plus grand ou égal que 4, donc on ajoute un 1 binaire, et soustrayez 4.
Nous sommes à gauche avec 01.25, qui est plus petit que 2, donc on ajoute un 0 binaire.
Nous sommes à gauche avec 01.25, qui est plus grand ou égal que 1, nous avons donc ajouter un 1 binaire, et soustrayez 1.
Avec des entiers, nous aurions zéro à gauche, de sorte que nous nous arrêtons. Mais:
Nous sommes à gauche avec 00.25, qui est plus petit que 0,5, alors on ajoute un 0 binaire.
Nous sommes à gauche avec 00.25, qui est plus grand ou égal à 0,25, nous avons donc ajouter un 1 binaire, et soustraire de 0,25.
Maintenant, nous avons zéro, donc nous arrêter (ou pas, vous pouvez continuer et de calcul des zéros pour toujours si vous le souhaitez)

Notez que tous les "facile" nombres en décimal toujours d'atteindre le zéro point d'arrêt. 0.1 (décimal), converti en base 2, est infiniment répété: 0.0001100110011001100110011... Cependant, tous les "facile" nombres en binaire se convertissent toujours bien en base 10.

Vous pouvez également faire le même processus avec des fractions de (2.5), irrationnel (pi) ou imaginaire(2i) des bases, à l'exception de la base ne peut pas être compris entre -1 et 1 inclus .

11voto

Alexey Frunze Points 37651

2.000 10 = 2 +1 = 10.000 2
1.000 10 = 2 +0 = 01.000 2
0.500 10 = 2 -1 = 00.100 2
0,250 10 = 2 -2 = 00,010 2
0,125 10 = 2 -3 = 00,001 2

8voto

Peter Wooster Points 3270

Les fractions de base 2 sont 0,1 = 1/2, 0,01 = 1/4. ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X