Autor
|
Tema: Problema con programa c para binario en decimales (Leído 4,303 veces)
|
alexisrojas
Desconectado
Mensajes: 1
|
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
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
¡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
Mensajes: 93
|
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 #include <stdio.h> #include <limits.h> int main() { size_t i; unsigned msb = 1U << (sizeof(unsigned) * CHAR_BIT - 1); typedef union { float f; unsigned u; } type; type num; num.f = 12.8830; for (i = 0; i < sizeof(float) * CHAR_BIT; i++) { msb >>= 1; } return 0; }
|
|
|
En línea
|
|
|
|
AlbertoBSD
Programador y
Moderador Global
Desconectado
Mensajes: 3.705
🏴 Libertad!!!!!
|
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_flotanteSaludos.
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
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
Mensajes: 702
The man in the Middle
|
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
Mensajes: 3.412
ASMático
|
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
Mensajes: 93
|
Vaya no me había fijado en la formula que se propuso pero bueno tal vez esto sirva #include <iostream> #include <bitset> int main() { std::string buf; float n = 0.75; unsigned zero = n; !zero ? buf = "0." : buf = std::bitset<32>(n).to_string() + '.'; n = n - (int)n; while(n > 0) { n = n * 2.0; buf = buf + ((int)n >= 1 ? '1' : '0'); if((int)n >= 1) n = n - 1.0; } std::cout << (!zero ? buf : buf.substr(buf.find("1", 0))) << std::endl; return 0; }
|
|
« Última modificación: 14 Junio 2016, 04:26 am por geeke »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Como convertir numeros decimales a numeros binario en c++?
Programación C/C++
|
fco_noh
|
3
|
9,280
|
31 Agosto 2010, 07:38 am
por do-while
|
|
|
Programa para decodificar protocolo binario
Dudas Generales
|
macurbano
|
0
|
2,545
|
13 Febrero 2012, 21:58 pm
por macurbano
|
|
|
[c++] Problema con programa de Entero a Binario
Programación C/C++
|
audiogalaxy.
|
2
|
3,288
|
9 Septiembre 2013, 08:22 am
por eferion
|
|
|
Conversor de numeros decimales a binario con punto decimal basico
Programación C/C++
|
ivanel93
|
0
|
2,573
|
15 Septiembre 2013, 06:21 am
por ivanel93
|
|
|
Problema con programa conversor de decimal a binario
Programación C/C++
|
jamatbar
|
3
|
2,479
|
27 Noviembre 2013, 18:32 pm
por jamatbar
|
|