elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Convertir de Long a Binario
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Convertir de Long a Binario  (Leído 6,439 veces)
BlaineMonkey

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Convertir de Long a Binario
« en: 21 Junio 2011, 15:04 pm »

Tengo una variable long y quiero convertir el número a binario, pero no sé cómo hacerlo.  Pongo un ejemplo de qué es lo que quiero, para ver si se os ocurre como podría hacerlo.
Ejemplo:
long valor = 5
int binData[8]={0,0,0,0,0,0,0,0};

Quiero guardar el 5 en binario en un array de 8 enteros el valor.

Ejemplo:
binData contendría el array siguiente: {0,0,0,0,0,1,0,1};

¿Cómo puedo hacerlo?


En línea

Ca0s

Desconectado Desconectado

Mensajes: 32


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #1 en: 21 Junio 2011, 15:28 pm »

Haz la conversión a binario tal cual la harías con boli y papel...
Te pongo la conversión (la imprime al revés):

Código:
#include <stdio.h>
int main()
{
  long num=5;
  long res=0;
  long coc=0;
  while(num>=2)
  {
coc=num/2;
res=num%2;
printf("%i", res);
num=coc;
  }
  printf("%i\n", num);
  return 0;
}


En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #2 en: 21 Junio 2011, 20:37 pm »

.

Asi tambien se puede: <Aqui esta el codigo Corriendo en CodePad>

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. struct _byte_bits {
  7.    unsigned bit0:1;
  8.    unsigned bit1:1;
  9.    unsigned bit2:1;
  10.    unsigned bit3:1;
  11.    unsigned bit4:1;
  12.    unsigned bit5:1;
  13.    unsigned bit6:1;
  14.    unsigned bit7:1;
  15. };
  16.  
  17. int main()
  18. {
  19.    long        _long   = 78;
  20.    int         _i      = 0;
  21.    _byte_bits  _binary[sizeof(long)];
  22.  
  23.    memset( &_binary , 0 , sizeof(_byte_bits)*sizeof(long) );
  24.    memcpy( &_binary , &_long , sizeof(_byte_bits)*sizeof(long) );
  25.  
  26.    for ( _i=(sizeof(_byte_bits)-1) ; _i>=0 ; --_i ) {
  27.        fprintf( stdout , "%d" , _binary[_i].bit7 );
  28.        fprintf( stdout , "%d" , _binary[_i].bit6 );
  29.        fprintf( stdout , "%d" , _binary[_i].bit5 );
  30.        fprintf( stdout , "%d" , _binary[_i].bit4 );
  31.        fprintf( stdout , "%d" , _binary[_i].bit3 );
  32.        fprintf( stdout , "%d" , _binary[_i].bit2 );
  33.        fprintf( stdout , "%d" , _binary[_i].bit1 );
  34.        fprintf( stdout , "%d" , _binary[_i].bit0 );
  35.    }
  36.    return 0;
  37. }
  38.  

Dulces Lunas!¡.
« Última modificación: 21 Junio 2011, 21:25 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #3 en: 21 Junio 2011, 22:06 pm »

Los números long son de 4 bytes por lo tanto tienen 32 bits. Yo lo hice con un número de 8 bits, o sea, de tipo unsigned char.

Código
  1. #include <iostream>
  2.  
  3. int main(int argc, char * argv[])
  4. {
  5. unsigned char numBin[8], numero = 5;
  6. unsigned char aux = 0;
  7.  
  8. for (int i = 0; i < 8; i++)
  9. {
  10. aux = numero >> (7 - i);
  11. aux = aux << 7;
  12.  
  13. if (aux == 128)
  14. numBin[i] = 0x31; //Un 1
  15. else
  16. numBin[i] = 0x30; //Un 0
  17. std::cout << numBin[i];
  18. }
  19. std::cin.get();
  20. return 0;
  21. }
  22.  

Son puras matemáticas, se van desplazando los bits de derecha a izquierda para conseguir que quede 128, si es así significa que el bit actual es 1.

Saludos.
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #4 en: 21 Junio 2011, 23:18 pm »

.
Con mascaras y con el dezplazamiento de bits ( los dos metodos mas rapidos ) puedes obtener el numero binario.

Aqui te dejo el codigo corriendo http://codepad.org/jfxvOYW5

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. int main() {
  5.    unsigned char byte = 205;
  6.    fprintf( stdout , "%d" , (byte & 0x80)>>7 );
  7.    fprintf( stdout , "%d" , (byte & 0x40)>>6 );
  8.    fprintf( stdout , "%d" , (byte & 0x20)>>5 );
  9.    fprintf( stdout , "%d" , (byte & 0x10)>>4 );
  10.    fprintf( stdout , "%d" , (byte & 0x8)>>3 );
  11.    fprintf( stdout , "%d" , (byte & 0x4)>>2 );
  12.    fprintf( stdout , "%d" , (byte & 0x2)>>1 );
  13.    fprintf( stdout , "%d" , (byte & 0x1) );
  14.    return 0;
  15. }
  16.  
  17.  

P.D.: Los numeros Long dependen su longitud de bytes segun la arquitectura del PC es decir en una architectura x32 = 4 bytes y en una de x64 son 8 bytes... segun se la que le seguira en un futuro la de x128 sera de 16 bytes...

Dulces Lunas!¡.
« Última modificación: 21 Junio 2011, 23:23 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #5 en: 22 Junio 2011, 14:01 pm »

BlackZeroX no se de donde sacaste eso de los números long, pero yo tengo Win7 SP1 64 bits y haciendo un sizeof al tipo long me dice que son 4 bytes. Todo esto usando el Visual C++ 2010.

Saludos.
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: Convertir de Long a Binario
« Respuesta #6 en: 22 Junio 2011, 14:13 pm »

http://www.cplusplus.com/doc/tutorial/variables/

Y tema solucionado.
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Akai


Desconectado Desconectado

Mensajes: 823



Ver Perfil
Re: Convertir de Long a Binario
« Respuesta #7 en: 22 Junio 2011, 14:20 pm »

Khronos14 y Queta:

http://en.wikipedia.org/wiki/Long_integer

Fijaos en la diferencia según el sistema o el estándar que se use.

Por ejemplo, Linux kernel 2.6.39 x64 usando gcc 4.6:
Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5. printf("%d %d %d\n",sizeof(int),sizeof(long),sizeof(long int));
  6.  
  7. return 0;
  8.  
  9. }
  10.  

resultado:
4 8 8
En línea

Queta

Desconectado Desconectado

Mensajes: 267



Ver Perfil
Re: Convertir de Long a Binario
« Respuesta #8 en: 22 Junio 2011, 14:41 pm »

Obviamente, ya es lo que dije:

Citar
* The values of the columns Size and Range depend on the system the program is compiled for. The values shown above are those found on most 32-bit systems. But for other systems, the general specification is that int has the natural size suggested by the system architecture (one "word") and the four integer types char, short, int and long must each one be at least as large as the one preceding it, with char being always one byte in size. The same applies to the floating point types float, double and long double, where each one must provide at least as much precision as the preceding one.

http://www.cplusplus.com/doc/tutorial/variables/
En línea

"Intenta no volverte un hombre de éxito, sino volverte un hombre de valor." Albert Einstein.
Khronos14


Desconectado Desconectado

Mensajes: 443


A lie is a lie


Ver Perfil WWW
Re: Convertir de Long a Binario
« Respuesta #9 en: 22 Junio 2011, 15:13 pm »

Vale hombre, no hagamos un flame de esto xD

Tan sólo me pareció raro, porque siempre pensé que el tipo long en Windows era de 4 bytes.

En mi Debian, con gcc version 4.4.5 (Debian 4.4.5-8) y Linux 2.6.32-5-686:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.  
  5. printf("%d %d %d\n",sizeof(int),sizeof(long),sizeof(long int));
  6.  
  7. return 0;
  8.  
  9. }
  10.  

Me da esto:
4 4 4

Saludos.

En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
convertir long a rgb
Programación Visual Basic
<[(x)]> 3 5,658 Último mensaje 5 Marzo 2009, 07:56 am
por hechelion
Problema al convertir de binario a hexadecimal (MAC)
Java
xopito 2 5,028 Último mensaje 26 Marzo 2011, 11:43 am
por xopito
Arrays de chars to long long
Programación C/C++
Xedrox 0 1,404 Último mensaje 24 Diciembre 2012, 01:03 am
por Xedrox
Long long to char
Programación C/C++
Xedrox 3 2,583 Último mensaje 5 Agosto 2013, 10:15 am
por amchacon
problemas con long long int
Programación C/C++
m@o_614 7 3,703 Último mensaje 13 Marzo 2014, 17:59 pm
por Yoel Alejandro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines