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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con programa c para binario en decimales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con programa c para binario en decimales  (Leído 4,303 veces)
alexisrojas

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Problema con programa c para binario en decimales
« 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  :(


En línea

do-while


Desconectado Desconectado

Mensajes: 1.276


¿Habra que sacarla de paseo?


Ver Perfil
Re: Problema con programa c para binario en decimales
« Respuesta #1 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.


« Última modificación: 12 Junio 2016, 18:47 pm por do-while » En línea

- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!
geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Problema con programa c para binario en decimales
« Respuesta #2 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.  
En línea

AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Problema con programa c para binario en decimales
« Respuesta #3 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.
En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Problema con programa c para binario en decimales
« Respuesta #4 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 + ...
En línea

Kaxperday


Desconectado Desconectado

Mensajes: 702


The man in the Middle


Ver Perfil WWW
Re: Problema con programa c para binario en decimales
« Respuesta #5 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.
« Última modificación: 13 Junio 2016, 11:57 am por Kaxperday » En línea

Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Problema con programa c para binario en decimales
« Respuesta #6 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.
En línea

geeke

Desconectado Desconectado

Mensajes: 93


Ver Perfil
Re: Problema con programa c para binario en decimales
« Respuesta #7 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.  
« Última modificación: 14 Junio 2016, 04:26 am por geeke » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines