Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Sherboc en 21 Junio 2016, 04:13 AM

Título: ¿Cómo separar un numero binario en digitos?
Publicado por: Sherboc en 21 Junio 2016, 04:13 AM
Hola a todos,  eh estado investigándolo pero no averiguo como puedo separar un numero binario en sus dígitos, tengo entendido que debo de usar los operadores de división y de módulo pero no se como...Lo necesito saber para que pueda terminar un programa en C para convertir un num binario a decimal, y por eso quiero que me digan desde sus conocimientos como podría separar el numero.

De ante mano, gracias por la atención.
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: AlbertoBSD en 21 Junio 2016, 04:19 AM
Dejare esto por aqui:

[youtube=640,360]https://www.youtube.com/watch?v=dQfP6urxOY0[/youtube]

Saludos
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: Sherboc en 21 Junio 2016, 04:35 AM
Cita de: AlbertoBSD en 21 Junio 2016, 04:19 AM
Dejare esto por aqui:


Saludos

Gracias pero no es como necesito el programa  :xD, lo debo de hacer con los operadores de división y modulo ya que la programación del video es más avanzada  :-\.
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: AlbertoBSD en 21 Junio 2016, 05:33 AM
Es casi lo mismo solo se sustitullenas operaciones.

El recorrimiento de bits es la division entre 2 y el & e el modulo.

Aqui esta el codigo:

char *binario(unsigned int n){
  static char b[33];
  int i =0, temp;
  whilen( n > 0){
   temp = n %2;
   if(temp==1){
     b[i] = '1';
   }
   else{
     b[i] = '0';
   }
   n = (int) n/2;
   i++;
  }
  b[i] = '\0';
  return b;
}


Saludos.
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: Sherboc en 21 Junio 2016, 22:19 PM
Cita de: AlbertoBSD en 21 Junio 2016, 05:33 AM
Es casi lo mismo solo se sustitullenas operaciones.

El recorrimiento de bits es la division entre 2 y el & e el modulo.

Aqui esta el codigo:

char *binario(unsigned int n){
 static char b[33];
 int i =0, temp;
 whilen( n > 0){
  temp = n %2;
  if(temp==1){
    b[i] = '1';
  }
  else{
    b[i] = '0';
  }
  n = (int) n/2;
  i++;
 }
 b[i] = '\0';
 return b;
}


Saludos.

Ya le entendí a tu código bro jaja, nada mas que lo que yo ando buscando es hacer lo de la separación y lo de cambios de bits sin usar "arreglos o matrices" . Solo con while, if, else y operadores de división. Pero pues me pondré a investigar más para no molestar preguntando tanta cosa.

Un saludo!.
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: AlbertoBSD en 21 Junio 2016, 22:28 PM
No te preocupes por preguntar lo de la matris es solo por si quieres guardar el valor.

Si lo que quieres es realizar cierta acción cuando se uno o cero entonces:

void binario(unsigned int n){
  int i =0, temp;
  whilen( n > 0){
   temp = n %2;
   if(temp==1){
    //hacer algo si es uno
   }
   else{
     //hacer algo si es cero
   }
   n = (int) n/2;
   i++;
  }
}


Saludos
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: Sherboc en 22 Junio 2016, 22:08 PM
Ok gracias, de echo lo que yo estoy haciendo es un programa para convertir un binario a decimal pero tengo que saber separar en dígitos el numero binario, intentaré aplicar cosas de tu código y haber si queda  ::).

Un saludo.
Título: Re: ¿Cómo separar un numero binario en digitos?
Publicado por: AlbertoBSD en 24 Junio 2016, 02:30 AM
Tu quieres entonces el proceso para pasar de Cadena Binaria a Entero?

Dejo aqui el codigo y un video adiconal:

[youtube=640,360]https://www.youtube.com/watch?v=a3t3oEO8DuI[/youtube]


/*
Pasar una secuencia binaria (En forma de Cadena) a valor entero.
- Potencias de 2
- Retornar el valor entero

Twitter @albertoBSD

*/

#include<stdio.h>

unsigned int binario_entero(char *binario);

int main() {
printf("%i\n",binario_entero("0"));
printf("%i\n",binario_entero("1"));
printf("%i\n",binario_entero("11111111"));
return 0;
}

unsigned int binario_entero(char *binario) {
unsigned int r = 0;
int base2 = 1;
int i = 0;
while(binario[i] != '\0' && i < 32) {
if(binario[i] == '1') {
r =  r + base2;
}
base2 = base2 * 2;
i++;
}
return r;
}