por andresprimo » Jue Jun 16, 2011 4:44 pm
Hola.
Aclaro que una vez convertido a binario, lo pasas a octal agrupando de a 3 bits empezando siempre desde el bit de menor peso (llamado bit cero o de paridad). Para pasarlo a hexadecimal, los agrupas de 4 en 4 (4 bits = 1 nibble).
Para convertir a binario es mas simple de lo que pensas.
Con el numero en la mano, preguntas si es par. De ser asi, su bit de menor peso de 0. En caso contrario es 1.
Guardas ese bit en un string que va recolectando los bits que encuentras.
Ahora viene el truco importante. Hay que eliminar ese bit verificado de menor peso, y correr todos los demas de manera que el nuevo bit de menor peso sea el siguiente. Eso se logra con la operacion SHR (shift-right, o corrimiento a la derecha). En C++ me parece que es dato >> cant-bits. Los dos signos de mayor indica el SHR. Aqui tenes que hacer numero >> 1 porque desplazamos 1 bit a la derecha. Una vez hecho esto, preguntamos si es par o impar y obtenemos el valor del siguiente bit en el numero. Lo guardamos en el string a continuacion de los bits ya guardados. Volvemos a desplazar 1 bit a la derecha y volvemos a preguntar por su paridad. Todo esto se repite hasta que se agotaron todos los bits del numero en cuestion.
Simple no?.
Veamos como hacemos con el paso a octal.
Tomamos el string y sacamos los 3 bits de menor peso en un substring. Aclaro que el 1er caracter del substring es el bit de menor peso en el ejemplo de codigo que doy. En "011" el bit de menor peso es el 0.
Luego hacemos las comparaciones con IFs.
IF Substring = "000" then DigitoOctal=0
IF Substring = "100" then DigitoOctal=1
IF Substring = "010" then DigitoOctal=2
IF Substring = "110" then DigitoOctal=3
IF Substring = "001" then DigitoOctal=4
IF Substring = "101" then DigitoOctal=5
IF Substring = "011" then DigitoOctal=6
IF Substring = "111" then DigitoOctal=7
Pasamos al siguiente grupo de 3 bits en el string binario y volvemos a verificar con los IFs generando el siguiente digito octal, siempre desde el menor peso hacia el mayor peso. Si la cantidad de bits no es multiplo exacto de 3, el resto se rellena con ceros.
Con hexadecimal es lo mismo, solo que de 4 en 4 y con mas IFs porque son 16 casos, desde el 0 al 15. Ademas, el digito hexadecimal empieza a ser letra a partir del 10, donde corresponde la letra A, y la letra F para el 15.
Finalmente mostras la cadena resultado por pantalla que has generado.
Espero haber sido claro con el metodo.
ANDRES.-