2011-02-13 14 views
49

1/10(decimal) = 0.0001100110011... (binary)¿Cómo se convierte una fracción a binaria?

¿Cómo puedo hacer eso? ¿Se supone que debo convertir a binario y luego dividir? ¿Podría alguien mostrarme?

+0

Se puede ampliar lo que quiere decir con "binario"? "Convertir a binario" realmente no tiene sentido. ¿Estás tratando de convertir el resultado de una operación de división a un número de coma flotante? –

+2

@Michael Petrotta: creo que quiere decir cómo se expresa una fracción en la base 2 como un decimal (posiblemente repetitivo). – templatetypedef

+0

http://kakopa.com/convert2binary.htm – QuantumKarl

Respuesta

79

En la universidad aprendí de esta manera:

  1. Multiplicar por dos
  2. toma decimal como el dígito
  3. tome la fracción como punto de partida para el siguiente paso
  4. repita hasta que llegue a 0 o un número periódico
  5. leer el número de partida de la parte superior - el primer resultado es el primer dígito después de la coma Ejemplo

:

0.1 * 2 = 0.2 -> 0 
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 = 0.4 -> 0 
0.4 * 2 = 0.8 -> 0 
0.8 * 2 = 1.6 -> 1 
0.6 * 2 = 1.2 -> 1 
Result: 0.00011(0011) periodic. 
+3

¿Dónde obtienes '0.1',' 0.2', '0.4',' 0.8', '0.6', etc.? – Strawberry

+2

De la fila anterior, es el resultado. La primera fila toma la entrada (en el caso de este ejemplo, 0.1). Solo sigue las instrucciones. – Femaref

+0

Gracias Fermaref! – Strawberry

13

Esto puede ser algo confuso, pero las posiciones decimales en binario representarían recíprocos de potencias de dos (por ejemplo, 1/2, 1/4, 1/8, 1/16, para el primero, segundo, tercero y cuarto lugar decimal, respectivamente) al igual que en decimales, los lugares decimales representan recíprocos de los poderes sucesivos de diez.

Para responder a su pregunta, necesitará averiguar qué recíprocos de potencias de dos necesitarían agregarse para agregar hasta 1/10. Por ejemplo:

1/16 + 1/32 = 0.09375, que está muy cerca de 1/10. Agregar 1/64 nos pone al día, al igual que 1/128. Pero, 1/256 nos acerca aún más. Entonces:

0.00011001 binary = 0.09765625 decimal, que está cerca de lo que usted pidió.

Puede seguir añadiendo más y más dígitos, por lo que la respuesta sería 0.00011001 ...

19
 
1    1 
-- (dec) = ---- (bin) 
10   1010 


     0.000110011... 
     ------------- 
1010 | 1.0000000000 
     1010 
     ------ 
     01100 
      1010 
     ----- 
      0010000 
      1010 
      ----- 
      01100 
       1010 
      ----- 
       0010 
+0

La división larga en realidad muestra por qué funciona el algoritmo en la respuesta aceptada. –

6

Aquí es cómo pensar del método.

Cada vez que multiplique por 2, está cambiando la representación binaria del número que queda en 1 lugar. Has desplazado el dígito más alto después del punto al lugar 1, así que quítate ese dígito, y es el primer (más alto, por lo tanto, el más a la izquierda) dígito de tu fracción. Hazlo de nuevo, y tienes el siguiente dígito.

Convirtiendo la base de un número entero dividiendo y tomando el resto como el siguiente dígito está desplazando el número a la derecha. Es por eso que obtienes los dígitos en el orden opuesto, el más bajo primero.

Esto, obviamente, se generaliza a cualquier base, no solo a 2, como se señala en GoofyBall.

Otra cosa en que pensar: si redondeas a N dígitos, detente en N + 1 dígitos. Si el dígito # N + 1 es uno, necesita redondear (ya que los dígitos en binario solo pueden ser 0 o 1, truncar con el siguiente dígito un 1 es tan inexacto como truncar un 5 en decimal).

+1

Excelente. La respuesta de Femaref parece mágica sin esta explicación. –

4

Me tomó un tiempo entender la respuesta de @Femaref ('s), así que pensé en dar más detalles.

Elboration

desea convertir decimal 1/10, que es igual a 0.1 a binario. Comience con 0.1 como su entrada y siga estos pasos:

  1. Multiplicar entrada por 2 (columna mult)
  2. Take decimal de la respuesta (columna de respuesta) como dígito (columna binaria)
  3. Tome la fracción (columna de fracciones) como entrada para el siguiente paso
  4. Repita los pasos 1, 2 y 3 hasta que llegue a 0 o a un número periódico. El inicio del número periódico en este caso se muestra en la última columna para que podamos detenernos allí. Pero continué mostrando la repetición para mayor claridad.
  5. La respuesta son los números tomados de la columna binaria que comienza en la parte superior.

En este caso es:

0.00011(0011) Note: numbers within parenthesis will keep repeating (periodic) 

+-------+-------+--------+---------+----------+--------+----------------------+ 
| input | mult | answer | decimal | fraction | binary |      | 
+-------+-------+--------+---------+----------+--------+----------------------+ 
| 0.1 | 2 | 0.2 | 0 |  .2 |  0 |      | 
| 0.2 | 2 | 0.4 | 0 |  .4 |  0 |      | 
| 0.4 | 2 | 0.8 | 0 |  .8 |  0 |      | 
| 0.8 | 2 | 1.6 | 1 |  .6 |  1 |      | 
| 0.6 | 2 | 1.2 | 1 |  .2 |  1 |      | 
| 0.2 | 2 | 0.4 | 0 |  .4 |  0 |      | 
| 0.4 | 2 | 0.8 | 0 |  .8 |  0 |      | 
| 0.8 | 2 | 1.6 | 1 |  .6 |  1 |      | 
| 0.6 | 2 | 1.2 | 1 |  .2 |  1 | < Repeats after this | 
| 0.2 | 2 | 0.4 | 0 |  .4 |  0 |      | 
| 0.4 | 2 | 0.8 | 0 |  .8 |  0 |      | 
| 0.8 | 2 | 1.6 | 1 |  .6 |  1 |      | 
| 0.6 | 2 | 1.2 | 1 |  .2 |  1 |      | 
+-------+-------+--------+---------+----------+--------+----------------------+