[ Foro de C ]

IEEE 754 conversor

02-Nov-2020 20:28
fernando herrera
1 Respuestas

Hola que tal, tengo una duda con un trabajo de programación en c.


1) Implemente un programa que solicite un número real, y usando operadores a nivel de bits pueda imprimir en pantalla los bits correspondientes al bit de signo, los bits del exponente y los bits de la mantisa. Por ejemplo:

Ingrese un número real: 2.5

01000000 00100000 00000000 00000000

bit de signo: 0 (0)
bits del exponente: 10000000 (128)
bits de la mantisa: 01000000000000000000000 (2097152)

Implemente funciones con los siguientes prototipos:

unsigned int get_ieee_exp (float);
unsigned int get_ieee_sign (float);
unsigned int get_ieee_mantissa (float);

para poder mostrar los valores enteros correspondientes a cada grupo de bits (los valores entre paréntesis)

Puede controlar el correcto funcionamiento utilizando conversores online como

https://www.h-schmidt.net/FloatConverter/IEEE754.html

2) Implemente una nueva versión del programa usando campos de bits.


Mi programa:



#include <stdio.h> 

void printBinary(int n, int i) 
{ 
	

	int k; 
	for (k = i - 1; k >= 0; k--) { 
		
		if ((n >> k) & 1) 
			printf("1"); 
		else
			printf("0"); 
	} 
} 

typedef union { 
	
	float f; 
	struct
	{ 
		
	
		unsigned int mantissa : 23; 
		unsigned int exponent : 8; 
		unsigned int sign : 1; 
		
	} raw; 
} myfloat; 


void printIEEE(myfloat var) 
{ 
	
	
	
	printf("%d | ", var.raw.sign); 
	printBinary(var.raw.exponent, 8); 
	printf(" | "); 
	printBinary(var.raw.mantissa, 23); 
	printf("\n"); 
} 

 
int main() 
{ 
	
	
	myfloat var; 
	
	 
	var.f = 23; 
	
	
	printf("IEEE 754 representation of %f is : \n", 
		   var.f); 
	printIEEE(var); 
	
	return 0; 
} 


Que debería agregar en mi programa para que me analice los valores enteros correspondientes a cada grupo de bits? Me imprime el valor en formato ieee754 pero no los valores que corresponden a cada parte, no se como se haría esa parte. si alguien puede ayudarme le agradeceria


12-Nov-2020 20:03
fernando herrera

we gracias por nada






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)