Respuesta
mar. 06, 2009 - 10:21
El proceso es totalmente diferente a como lo estás planteando. No se trata de ir dividiendo entre dos el valor decimal sucesivamente, sino de desglosar los componentes que son potencia de dos dentro del número decimal.
En el caso que has mostrado, 100, primero se busca la mayor potencia de dos que es inferior o igual al número en cuestión. Ésta es 64 (2 elevado a 6), y ahi escribiremos un 1. Le restamos 64 a 100 y obtenemos 36. Entonces procedemos con la potencia de dos immediatamente inferior a la anterior (2 elevado a 5 = 32). Puesto que 32 es inferior a 36, escribiremos otro 1. Restamos 32 a 36 y obtenemos 4. Procedemos con 2 elevado a 4 (16). Dado que 16 NO es inferior o igual a 4, escribimos un 0. Escribiremos otro 0 para 2 elevado a 3 (8), y un 1 para 2 elevado a 2 (4). Puesto que 4 - 4 es igual a cero, los dos siguientes componentes serán 0 (2 elevado a 1 y 2 elevado a 0). Ten en cuenta que dos elevado a zero es igual a 1 por convenio.
El resultado obtenido es el siguiente:
100 decimal = 1100100 binario
Los bits se leen de derecha a izquierda, y tienen las posiciones 0 a 6 (sólo en nuestro caso - lo normal es expresar un valor binario mediante 8 dígitos, cuyas posiciones son de 0 a 6, como sucede con los 8 bits de un byte). Se les atribuye un peso equivalente a (2 elevado a posición): 0->1, 1->2, 2->4, 3->8, 4->16, 5->32, 6->64. Para convertir de binario a decimal se realiza el proceso inverso, sumando los pesos de los dígitos que son 1.
Considerando el caso anterior, 1100100 binario:
0*1 + 0*2 + 1*4 + 0*8 + 0*16 + 1*32 + 1*64 = 100 decimal
Las potencias de dos son 1 (dos elevado a 0), 2 (dos elevado a 1), 4, 8, 16, 32, 64, 128, 256, 512, 1024... Abre cualquier calculadora (como la del Windows), dale al '2' y dale dos veces al '*'. Las obtendrás todas pulsando sucesivamente el '='.
La representación expresada arriba no es muy ortodoxa. Dado que la codificación binaria se utiliza básicamente en la elecrónica digital, los valores binarios suelen expresarse en grouos de 4, 8, 16 o 32 dígitos (los cuales pueden representar 16 valores decimales, 256 valores decimales, 65536 valores decimales o 4294967296 valores decimales, respectivamente - ésta es la razón por la que una máquina de 32 bits puede direccionar hasta 4 GBs de memoria - 4 GBs = 4 * 2^10 * 2^10 * 2^10 = 2^32). Cuando una representación binaria es de 4 dígitos, se le llama un nibble (lo cual equivale a medio byte, y ocupa un carácter hexadecimal). Cuando es de 8, un byte (dos carácteres hexadecimales). Cuando es de 16, una palabra (4), y cuando es de 32, una doble palabra (8). De modo que nosotros debíamos haber representado el valor anterior con 8 dígitos en vez de seis: 001100100, puesto que necesitábamos más de 4 (el otro formato habitual) para representarlo.
Vaya explicación, me he liado un poquillo. Espero que te lo haya aclarado mínimamente.
IronXavi
En el caso que has mostrado, 100, primero se busca la mayor potencia de dos que es inferior o igual al número en cuestión. Ésta es 64 (2 elevado a 6), y ahi escribiremos un 1. Le restamos 64 a 100 y obtenemos 36. Entonces procedemos con la potencia de dos immediatamente inferior a la anterior (2 elevado a 5 = 32). Puesto que 32 es inferior a 36, escribiremos otro 1. Restamos 32 a 36 y obtenemos 4. Procedemos con 2 elevado a 4 (16). Dado que 16 NO es inferior o igual a 4, escribimos un 0. Escribiremos otro 0 para 2 elevado a 3 (8), y un 1 para 2 elevado a 2 (4). Puesto que 4 - 4 es igual a cero, los dos siguientes componentes serán 0 (2 elevado a 1 y 2 elevado a 0). Ten en cuenta que dos elevado a zero es igual a 1 por convenio.
El resultado obtenido es el siguiente:
100 decimal = 1100100 binario
Los bits se leen de derecha a izquierda, y tienen las posiciones 0 a 6 (sólo en nuestro caso - lo normal es expresar un valor binario mediante 8 dígitos, cuyas posiciones son de 0 a 6, como sucede con los 8 bits de un byte). Se les atribuye un peso equivalente a (2 elevado a posición): 0->1, 1->2, 2->4, 3->8, 4->16, 5->32, 6->64. Para convertir de binario a decimal se realiza el proceso inverso, sumando los pesos de los dígitos que son 1.
Considerando el caso anterior, 1100100 binario:
0*1 + 0*2 + 1*4 + 0*8 + 0*16 + 1*32 + 1*64 = 100 decimal
Las potencias de dos son 1 (dos elevado a 0), 2 (dos elevado a 1), 4, 8, 16, 32, 64, 128, 256, 512, 1024... Abre cualquier calculadora (como la del Windows), dale al '2' y dale dos veces al '*'. Las obtendrás todas pulsando sucesivamente el '='.
La representación expresada arriba no es muy ortodoxa. Dado que la codificación binaria se utiliza básicamente en la elecrónica digital, los valores binarios suelen expresarse en grouos de 4, 8, 16 o 32 dígitos (los cuales pueden representar 16 valores decimales, 256 valores decimales, 65536 valores decimales o 4294967296 valores decimales, respectivamente - ésta es la razón por la que una máquina de 32 bits puede direccionar hasta 4 GBs de memoria - 4 GBs = 4 * 2^10 * 2^10 * 2^10 = 2^32). Cuando una representación binaria es de 4 dígitos, se le llama un nibble (lo cual equivale a medio byte, y ocupa un carácter hexadecimal). Cuando es de 8, un byte (dos carácteres hexadecimales). Cuando es de 16, una palabra (4), y cuando es de 32, una doble palabra (8). De modo que nosotros debíamos haber representado el valor anterior con 8 dígitos en vez de seis: 001100100, puesto que necesitábamos más de 4 (el otro formato habitual) para representarlo.
Vaya explicación, me he liado un poquillo. Espero que te lo haya aclarado mínimamente.
IronXavi
Añadir Nuevo Comentario