[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