Meus amigos, me esclareçam uma dúvida cruel, por favor: eu escrevi um pequeno programa em C CCS para fazer a soma de duas variáveis do tipo ponto flutuante e armazenar o resultado da soma em uma delas. O pequeno código ficou assim:
float x1, x2;
x1 = 0.5;
x2 = 0.5;
x1 = x1 + x2;
Acompanhando a execução do programa e o resultado da operação no menu FILE REGISTERS do MPLAB, ele me mostrou o seguinte, enquanto o ponteiro passava pelos valores aplicados a x1 e x2:
ENDEREÇO HEX DEC VAR
039 7E 126 x1
03A 00 0
03B 00 0
03C 00 0
03D 7E 126 x2
03E 00 0
03F 00 0
040 00 0
Evidentemente, como as variáveis do tipo float são de 32bits, num sistema de 8 bits elas ocuparão 4 posições da memória de usuário.
Mas, agora vem a pergunta: por que esses valores 0x7E (hex) ou 126 (dec)? De onde eles vieram? Como um valor declarado como 0,5 se transformou em 0x7E ou 126?
Após a soma, o valor de x1 = 1 e o valor de x2 = 0,5, correto?
No menu do MPLAB, ele mostrou os resultados seguintes:
ENDEREÇO HEX DEC VAR
039 7F 127 x1
03A 00 0
03B 00 0
03C 00 0
03D 7E 126 x2
03E 00 0
03F 00 0
040 00 0
Na verdade, o que eu quero saber, é como o compilador C processa essas variáveis tipo ponto flutuante para gerar valores tão estranhos em suas operações matemáticas? Obrigado amigos.