这里几天在DIY一个DDS
遇到一个很有意思的问题
撸出来大家瞧瞧
unsigned int FREQ_MHz=0,FREQ_kHz=0,FREQ_Hz=0;
long unsigned int FREQ=1000;
定义了无符号整型的三个变量
FREQ_MHz、FREQ_kHz和FREQ_Hz
一个无符号long型变量
FREQ
四个变量进行运算
FREQ = FREQ_MHz*1000000+FREQ_kHz*1000+FREQ_Hz;
上式运算,FREQ_kHz变量值超过50,FREQ_kHz*1000运算就会出错
譬如FREQ_MHz=3,FREQ_kHz=66,FREQ_Hz=10
运算结果 FREQ=3042610
估摸着是变量类型不对造成的问题
遂改为
FREQ = FREQ_MHz*1000000+(long)FREQ_kHz*1000+FREQ_Hz;
一切运算正常
那么问题来了
为毛FREQ_MHz和FREQ_Hz没有强制转换
计算结果会对呢?
大神们,快出来水水
补充一下,编译环境是CCS6