📄 float.c
字号:
#include <REG52.h>
#include <FLOAT.h>
#define Uchar unsigned char
#define Uint unsigned int
Uchar x[4];
void FtoC(void);
void CtoF(void);
Uchar get_Ex(void);
void get_int(Uchar Ex);
void get_xiao(Uchar Ex);
/*************************************************************/
void FtoC(void)
{
float a;
Uchar i,*px;
void *pf;
px = x;
pf = &a;
a = 34.526 * 9.1;
for(i=0; i<4; i++)
*(px + i) = *((char *)pf + i);
}
/****************************************************************/
void CtoF(void)
{
float a;
Uchar i,*px;
Uchar x[4] = {56,180,150,73};
void *pf;
px = x;
pf = &a;
for(i=0; i<4; i++)
*((char *)pf + i) = *(px + i);
}
/*****************************************************************/
Uchar get_Ex(void)
{
Uint Ex;
Ex = (x[0] << 1) + (x[1] >> 7) - 127;
return(Ex);
}
/*****************************************************************/
void get_int(Uchar Ex)
{
Uint I;
if(Ex < 8)
I = (x[1] | 0x80) >> (7 - Ex);
else if((Ex > 7) && (Ex < 16))
{
I = x[1];
I = (I << 8) + x[2];
I = (I | 0x8000) >> (15 - Ex);
}
}
/******************************************************************/
void get_xiao(Uchar Ex)
{
long y[8] = {50000000L,25000000L,12500000L,6250000L,3125000L,1562500L,781250L,390625L};
long P;
Uchar Pf,Ps,Pt,n;
if(Ex < 8)
n = (x[1] << (Ex + 1)) + (x[2] >> (7 - Ex));
else if(Ex > 7 && Ex < 16)
n = (x[2] << (Ex - 7)) + (x[3] >> (15 - Ex));
P = (n >> 7) * y[0] + ((n >> 6) & 0x01) * y[1] + ((n >> 5) & 0x01) * y[2] + ((n >> 4) & 0x01) * y[3] + ((n >> 3) & 0x01) * y[4] +((n >> 2) & 0x01) * y[5] +((n >> 1) & 0x01) * y[6] + ((n >> 0) & 0x01) * y[7];
Pf = P / 10000000L;
Ps = (P % 10000000L) / 1000000L;
Pt = ((P % 10000000L) % 1000000L) / 100000L;
}
/********************************************************************************************************************************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -