2010-10-17 19 views
30

¿Alguien puede decirme cómo puedo convertir este número de flotador: 12.25 a binario? Sé cómo convertir el "12" pero no el 0.25¿Cómo convertir el número de flotador a Binario?

Cualquier ayuda es muy apreciada. Gracias

+4

Manualmente :) Puedo hacerlo programáticamente después de eso. –

+0

¿Quieres obtener '1100.01'? – SLaks

+0

Sí :) Necesito saber cómo calcular el 0.25 a binario –

Respuesta

21

Keep multiplicando el número después de decimal por 2 hasta que se convierte 1,0:

0.25*2 = 0.50 
0.50*2 = 1.00 

y el resultado es en orden inverso ser 0,01

+0

Lo tengo, eso parece lógica ahora, gracias :) –

+10

@Slim Black: Cuidado: eso funciona bien para números como 0.25, que tienen representaciones exactas en binario, pero no para números como 0.1, que no: 0.1 * 2 = 0.2, 0.2 * 2 = 0.4, 0.4 * 2 = 0.8, 0.8 * 2 = 1.6, 0.6 * 2 = 1.2, 0.2 * 2 = 0.4, ... Se repite para siempre, y el resultado es 0.0 (0011) (la parte entre paréntesis se repite). –

+0

@Slim Black: Y tenga en cuenta que para implementar esto correctamente mediante programación, necesitará una aritmética decimal: consulte mi artículo http://www.exploringbinary.com/base-conversion-in-php-using-bcmath/, específicamente la sección dec2bin_f().) –

13

(d significa decimal, b significa binario)

  1. 12.25d es su flotador.
  2. Escribes 12d en binario y lo quitas de tu flotador. Solo quedará el resto (.25d).
  3. Usted escribe el punto.
  4. Mientras que el resto (0.25d) no es cero (y/o desea más dígitos), multiplíquelo con 2 (-> 0.50d), elimine y escriba el dígito que queda al lado del punto (0) y continúe con el nuevo resto (.50d).
+0

Sí, gracias por su respuesta :) –

+1

¿Qué pasa si mi flotador es 5.1? Haciendo los pasos tuyos, entré en un ciclo infinito, ¡por favor ayuda! – nautilusvn

+2

@nautilusvn: como no hay una potencia de 2 que también sea un múltiplo de 10, ese número tiene una secuencia infinita de dígitos. es posible que desee abortar su cálculo en alguna parte. – comonad

1
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 
+0

OP preguntó cómo hacerlo manualmente. –

+0

quizás también desee agregar la referencia de dónde lo obtuvo. este código python me resulta familiar. –

8

Considérese a continuación ejemplo

Convertir 2.625 a binario.

Consideraremos el entero y la parte fraccionaria por separado.

The integral part is easy, 2 = 10. 

Para la parte fraccionaria:

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. 

Así 0,625 = 0,101, y 2,625 = 10,101.

Vea el enlace this para obtener más información.

3

El valor de flotación se almacena en formato IEEE 754, por lo que no podemos codificar directamente como entero, char a binario. Pero podemos convertir float en binario a través del puntero.

main() 
{ 
float a=7.5; 
int i,*p; p=&a; 
for (sizeof(int)*8-1;i>=0;i--) 
printf("%d",(*p)>>i&1); 
} 
OUTPUT::0 10000001 11100000000000000000000---space for better clarification not included in part of the program. 
+1

Sé que es viejo, pero ¿cuál es el valor de ** i ** aquí? – Michi

Cuestiones relacionadas