stm8如何进行floa和long运算?
求助:stm8用到floa和long运算,运行时发现有问题,
请问各位,
stm8如何进行floa和long运算?
本帖最后由 zqszqs0001 于 2018-5-29 13:23 编辑
PWM_Hz=uart2_rx&0x0f;
PWM_Hz=PWM_Hz+10*(uart2_rx>>4);
PWM_Hz=PWM_Hz+100*(uart2_rx&0x0f);
PWM_Hz=PWM_Hz+1000*(uart2_rx>>4);
PWM_Hz=PWM_Hz+10000*(uart2_rx&0x0f);
PWM_Hz=PWM_Hz+100000*(uart2_rx>>4);
PWM_Hz为float或者unsigned long型;uart2_rx[]为byte型;
uart2_rx=0x12,uart2_rx=0x34,uart2_rx=0x56,运行后PWM_Hz应该是123456,但是,运行后PWM_Hz不是这个数。
为什么?
有啥问题,丢出代码大家帮你看看? 一般8位机的long型是32位的,int是16位,float和double也是32位。
具体stm8的话,写个程序看看就知道是几位的了。 stm8的int 和 long 都是一样的,float 运算和别处的使用方式都是一样的没啥区别,如果是float 比较的话 不能直接比较需要做差运算比较 正常应该是123456,你看下sizeof(PWM_Hz)占几个字节,你的结果是多少,猜测有可能是PWM_Hz数据溢出了。 直接用(float)a转换,只是精度会有下降,在32位系统中float有1个符号位+8个2的幂次位+23个精度位=32位,long有1个符号位+31个精度位=32位,有效数字会有损失。
页:
[1]