Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: alexisrojas en 12 Junio 2016, 18:08 pm



Título: Problema con programa c para binario en decimales
Publicado por: alexisrojas en 12 Junio 2016, 18:08 pm
tengo que crear una clase que me convierta un numero decimal como 0,012 o 12,8830 en binarios ya solo encuentro programas cambien la forma entera en binario pero no lo decimales  tengo la formula para convertir estos decimales en binario pero me da error al intentar pasarla a C
este es un ejemplo
cuando decimal llega 0.0 se termina la función si es periódico solo se indica la parte periódica

R=0.75                   

2R=1.5                                 D1=1                                                            F1=0.5
(se multiplica R                (se toma la parte entera                                  (se toma la parte decimal
por dos)                             de R )                                                               de R)

2F=1.0                                D2=1                                                              F2=0.0
(F1 se multiplica                 (se toma la parte entera de                          (la parte decimal de F1)
por dos                                 F!)

0.75 =0,11

ayuda por favor  :(


Título: Re: Problema con programa c para binario en decimales
Publicado por: do-while en 12 Junio 2016, 18:44 pm
¡Buenas!

Por lo que cuentas, en la parte decimal tienes dos problemas, extraer los decimales y decidir si hay un periodo. La primera parte es fácil, después de multiplicar por dos la parte decimal solo tienes que quedarte con la parte entera y restársela al número que has obtenido al multiplicar por dos antes de volver a iterar. Lo de decidir si es periódico o no... en base diez y sobre papel es fácil XD, pero realizando los cálculos con ordenador y teniendo en cuenta que tienes que convertirlo a base dos... busca en algún libro de matemática discreta o de teoría de números. Date cuenta de que no solo existen números con un número finito de decimales o con un periodo, sino que también tienes números irracionales con una cantidad infinita de decimales sin ningún tipo de patrón periódico.


Título: Re: Problema con programa c para binario en decimales
Publicado por: geeke en 12 Junio 2016, 22:33 pm
solo encuentro programas cambien la forma entera en binario pero no lo decimales 

Te ofrezco una aproximación en C, el cual interpreta un float como un entero usando una union para luego procesar e imprimir cada bit

Código
  1. #include <stdio.h>
  2. #include <limits.h>
  3.  
  4. int main()
  5. {
  6.    size_t i;
  7.    unsigned msb = 1U << (sizeof(unsigned) * CHAR_BIT - 1);
  8.  
  9.    typedef union
  10.    {
  11.        float f;
  12.        unsigned u;
  13.    } type;
  14.  
  15.    type num;
  16.    num.f = 12.8830;
  17.  
  18.    for (i = 0; i < sizeof(float) * CHAR_BIT; i++)
  19.    {
  20.        putchar(num.u & msb ? '1' : '0');
  21.        msb >>= 1;
  22.    }
  23.    return 0;
  24. }
  25.  


Título: Re: Problema con programa c para binario en decimales
Publicado por: AlbertoBSD en 12 Junio 2016, 23:48 pm
Caballeros tenian mi curiosidad ahora tienen mi atencion.

El detalle de pasar un numero Float a su cadena binaria es que realmente no sabes que estas interpretanro sin contexto, bien podria ser un numero entero o un numro negativo a complemente uno o complemento a dos.

Aqui hay un link con sobrr el estandar para operaciones aritmeticas de coma flotante.

https://es.m.wikipedia.org/wiki/IEEE_coma_flotante

Saludos.


Título: Re: Problema con programa c para binario en decimales
Publicado por: MAFUS en 13 Junio 2016, 01:37 am
No es el IEEE754 lo que busca sino la verdadera representación de los números decimales en binario:

... + n2*22 + n1*21 + n0*20 + n-1*2-1 + n-2*2-2 + ...


Título: Re: Problema con programa c para binario en decimales
Publicado por: Kaxperday en 13 Junio 2016, 11:55 am
Supongo que querrás hacer como std::bitset solo que esa es una clase de C++.

Bueno yo crearía un BYTE que actuara como máscara y lo iría iterando en un bucle dandole los siguientes valores 00000001 00000010 00000100 ... hasta 10000000. Para calcular este BYTE iterador solo tienes que igualarlo a 0 cada iteracción del bucle y sumarle 2^i y lo tendrás, luego con el operador AND (&) lo compararía con cada BYTE del numero (habrá que comparar cada BYTE del número (para un int 4 bytes, para un float 4 bytes también..), y por cada resultado positivo imprimes un 1 en una cadena y sino un 0.

Comparas en orden e imprimes, algo como lo que hace geeke.

Saludos.


Título: Re: Problema con programa c para binario en decimales
Publicado por: ivancea96 en 13 Junio 2016, 16:25 pm
geeke, Kaxperday, AlbertoBSD, pide la representación binaria de un número, dada su representación decimal. Nada de bits ni ni estándares.

alexisrojas, dices que lo has tratado de hacer en C. ¿Puedes poner el código y los errores que este te genera? O al menos decir concretamente qué problemas te da.


Título: Re: Problema con programa c para binario en decimales
Publicado por: geeke en 14 Junio 2016, 01:48 am
Vaya no me había fijado en la formula que se propuso pero bueno tal vez esto sirva

Código
  1. #include <iostream>
  2. #include <bitset>
  3.  
  4. int main()
  5. {
  6.    std::string buf;
  7.    float n = 0.75;
  8.    unsigned zero = n;
  9.  
  10.    !zero ? buf = "0." : buf = std::bitset<32>(n).to_string() + '.';
  11.    n = n - (int)n;
  12.    while(n > 0)
  13.    {
  14.        n = n * 2.0;
  15.        buf = buf + ((int)n >= 1 ? '1' : '0');
  16.        if((int)n >= 1) n = n - 1.0;
  17.    }
  18.    std::cout << (!zero ? buf : buf.substr(buf.find("1", 0))) << std::endl;
  19.    return 0;
  20. }
  21.