-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTRABORGfin.c
100 lines (72 loc) · 1.62 KB
/
TRABORGfin.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
//processo para calcular o sinal
int sinal(float a){
int sin;
if(a < 0){
sin = 1;
}
else if(a > 0){
sin = 0;
}
return sin;
}
//processo para achar a mantissa
void mantissa(float mant){
float multi;
int mantCal =1,i = 0,vet[23],j;
printf("Mantissa calculada = ");
while(mantCal ==1 || mantCal == 0){
multi = mant * 2;
mantCal = (int)multi;
printf("%d ",mantCal);
mant = multi-((int)multi);
i++;
if(mant == 0 && mantCal == 0) break;
}
if(i < 23){
for(j = i; j < 23; j++ ){
printf("0 ");
}
printf("\n");
}
printf("\n");
}
//processo de divisao do numero
int primeiroPasso(float num){
int expo = 0;
float quociente, resul, resultado, base;
while(1){
if(num <= 2)break;
quociente = num / 2;
expo++;
printf("%f/ 2 = %f\n",num,quociente);
num = quociente;
}
printf("Resultado 1 = %f x 2**%d\n",quociente,expo);
resultado = quociente -((int)quociente);
mantissa(resultado);
return expo;
}
//A funcao principal
int main(){
float num;
int sin, expoente,inteiro, i = 1, binarioInt;
printf("Informe o numero: ");
scanf("%f",&num);
expoente = primeiroPasso(num);
sin = sinal(num);
printf("SINAL = %d\n", sin);
printf("EXPOENTE = %d\n", expoente);
inteiro = expoente + 127;
//processo para converter a parte inteira
while(inteiro > 0){
binarioInt = binarioInt + inteiro % 2 * i;
i = i * 10;
inteiro = inteiro / 2;
}
printf("INTEIRA : %d\n\n",binarioInt);
//printf("NUMERO %f EM BINARIO E :%d%d\n",num,sin,binarioInt);
return 0;
}