[C con Clase] Hola a todos - Ayuda con operaciones con binarios
Steven Davidson
steven en conclase.net
Dom Mar 18 07:21:53 CET 2007
Hola David,
El pasado 2007-03-18 03:03:33, David Gonzalez escribió:
DG> Hola!.
DG> Este curso me ha servido montones, no solo ajora para la carrera sino desde
DG> antes cuando era mas autodidacta, y los felicito, no lo veia hace rato y lo
DG> encuentro significativamente mas grande y completo.
Nos alegra saber que seguimos siendo de ayuda.
DG> Mi nombre es David, soy estudiante de I semestre de Ing. de Sistemas en
DG> Bogota, COlombia y estoy teniendo un dolor de cabeza con un algoritmo (y el
DG> codigo obviamente) de un programa que me lea dos numeros y valide si son o
DG> no binarios y despues por medio de funciones (sin usar arrays o vectores)
DG> sume, reste, multiplique y divida estos numeros y de el resultado TODO en
DG> binario.
Supongo que con "binario" te refieres al sistema de numeración. Si esto es así, entonces tenemos que aclarar un matiz importante. Una cosa es el valor numérico y otra cosa es su representación. Por ejemplo,
5, cinco, V, cinque, five, ....., 101, 12, etcétera
Todas estas representaciones aluden al mismo valor numérico: 5. Las diferencias se encuentran en las distintas representaciones, pero no en su valor.
Dicho esto, no podemos validar los valores, pero sí sus representaciones. Recuerda que a nivel de hardware, todo es tratado en código binario. En C/C++, se puede escribir programas usando distintas representaciones, pero al final todo estará en binario. Por ejemplo,
void mostrar( int num );
int main()
{
mostrar( 0x3C );
mostrar( 15 );
...
}
Cuando lleguemos a 'mostrar()', sólo obtenemos los valores, sin representación. Lo que sí podemos hacer es tratar los valores con operadores a nivel de bits.
Por consiguiente, al leer un número, realmente estamos leyendo caracteres que representan un valor numérico. Puedes usar la función estándar 'strtol()'. Por ejemplo,
char szNumero[] = "101010011";
char *finalPtr;
long num = strtol( szNumero, &finalPtr, 2 );
Para la salida, me temo que no existe una función estándar que haga la tarea inversa de 'strtol()'. Pero tampoco es una gran pérdida, especialmente al convertir a binario. Puedes usar los operadores a nivel de bit para ir tomando cada bit de uno en uno en un bucle.
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase