Quelqu'un peut-il me dire comment convertir ce nombre flottant: 12,25 en binaire? Je sais comment convertir le "12" mais pas le 0,25
Toute aide est très appréciée. Merci
Continuez à multiplier le nombre après la décimale par 2 jusqu'à ce qu'il devienne 1,0:
0.25*2 = 0.50
0.50*2 = 1.00
et le résultat est dans l'ordre inverse étant .01
Considérez l'exemple ci-dessous
Nous considérerons séparément la partie entière et la partie fractionnaire.
The integral part is easy, 2 = 10.
Pour la partie fractionnaire:
0.625 × 2 = 1.25 1 Generate 1 and continue with the rest.
0.25 × 2 = 0.5 0 Generate 0 and continue.
0.5 × 2 = 1.0 1 Generate 1 and nothing remains.
Donc 0,625 = 0,101 et 2,625 = 10,101.
Voir le lien this pour plus d'informations.
(d signifie décimal, b signifie binaire)
La valeur flottante est stockée au format IEEE 754, nous ne pouvons donc pas la convertir directement comme entier, char en binaire.
Mais nous pouvons convertir float en binaire via un pointeur.
#include <stdio.h>
int main()
{
float a = 7.5;
int i;
int * p;
p = &a;
for (i = sizeof(int) * 8 - 1; i >= 0; i--)
{
printf("%d", (*p) >> i & 1);
}
return 0;
}
Sortie
0 10000001 11100000000000000000000
Espaces ajoutés pour clarification, ils ne sont pas inclus dans le programme.
x = float(raw_input("enter number between 0 and 1: "))
p = 0
while ((2**p)*x) %1 != 0:
p += 1
# print p
num = int (x * (2 ** p))
# print num
result = ''
if num == 0:
result = '0'
while num > 0:
result = str(num%2) + result
num = num / 2
for i in range (p - len(result)):
result = '0' + result
result = result[0:-p] + '.' + result[-p:]
print result #this will print result for the decimal portion