int2float
,
em C ou assembly, para converter um número no formato int
para o formato float
.
Essa função deve fazer a conversão sem usar operações de ponto flutuante,
isto é, deve operar diretamente sobre a representação binária dos
números.
O protótipo da função a ser implementada é:
float int2float(int i);
Construa a representação do número float f
em uma variável
do tipo inteiro e depois atribua essa representação a um float
usando o código abaixo:
typedef union { float f; unsigned int i; } U; /* fora da funcao */ ... float int2float (int i) { U u; ... /* seu codigo */ u.i = makefloat(...); return u.f; }
i =
(unsigned int)f
, não vale,
pois o C irá converter o formato, e a proposta do laboratório é você fazer a
conversão...#define makefloat(s,e,m) ((s & 1)<<31 | (((e) & 0xff) << 23) | ((m) & 0x7fffff))
float2int
, em C ou assembly, para converter um número
no formato float
para o formato int
.
Novamente, a função deve fazer a conversão sem usar operações de ponto flutuante.
O protótipo da função é:
int float2int(float f);
float
f
, use o código abaixo:typedef union { float f; unsigned int i; } U; /* fora da funcao */ ... int float2int (float f) { unsigned int i; U u; u.f = f; i = u.i; ... /* seu codigo */ }
#define getsig(x) ((x)>>31 & 1) #define getexp(x) ((x)>>23 & 0xff) #define getmant(x) ((x) & 0x7fffff)
main
para testar suas funções:
mainlab12.c