Hola, Elmercillo01:
Aquí está la rutina para convertir de decimales a binarios. La encontré en esta Web y la he modificado para utilizar el código adminiistrado de VC++ .NET (si deseas el código original, está en la página, además tiene una explicación detallada del funcionamiento de este algoritmo que, como ves no utiliza recursividad, sino iteraciones.)
short decimalABinario(unsigned long decimal, char binario __nogc⎬])
{
short indice,digitos_significativos=0;
unsigned long temp;
for(indice=31;indice>=0;indice--)
{
temp=decimal/(1<<indice);
if(temp>0)
{
binario[indice]=(char)('0'+temp);
decimal=decimal%(1<<indice);
if(!digitos_significativos)
digitos_significativos=indice;
}
else
{
binario[indice]='0';
}
}
return digitos_significativos;
}
Puedes apreciar que utiliza el tipo de datos unsigned long, por lo cual este método solamente funciona con enteros positivos de hasta 32 bits (4 bytes). A continuación te incluyo el código que utilicé para el evento click en el botón de convertir a decimales.
private: System::Void btnABinario_Click(System::Object * sender, System::EventArgs * e)
{
short digitos_significativos,indice;
char valorBinario __nogc⎬]
unsigned long numDecimal;
try {
txtBinario->Text="";
numDecimal = Convert::ToUInt32(txtDecimal->Text);
if (numDecimal < 0)
MessageBox::Show("No es un entero positivo.");
else {
digitos_significativos = decimalABinario(numDecimal,valorBinario);
StringBuilder* sb = new StringBuilder();
/*
* Si deseas todos los 0s iniciales utiliza
* for(index=31;index>=0;index--)
≈nbsp; */
for(indice=digitos_significativos;indice>=0;indice--) {
sb->Append(__box(valorBinario[indice]));
}
txtBinario->Text = sb->ToString();
}
} catch(Exception* ex) {
MessageBox::Show(ex->Message);
}
}
Para la cuestión de la suma y la resta de los binarios, puedes implementar métodos que sumen/resten los binarios directamente, o puedes sumar/restar sus equivalentes decimales y luego convertir el resultado en decimal.
Como ya te habrás dado cuenta por el otro thread de este foro, recién estoy comenzando a utilizar este lenguaje, pero sé que puedo ayudarte en algo. Ahora no tengo mucho tiempo, pero en estos días te puedo mandar la solución completa. Sino, puedes guiarte del código de arriba. Por lo pronto, para el complemento, te puedo adelantar que primero tienes que restarle uno al número binario y luego puedes recorrer el arreglo de valores significativos (arreglo de char) y cambiar los ceros por unos y viceversa.
Hasta la próxima. Bye.
Я!©ђ!Є ©Я∆ZΨ |