ccs中的数据类型强制转换问题

在LED显示代码中,为显示浮点型数据的整数和小数部分,使用了long型数据以避免溢出。在将浮点型变量ttime转换为long型并进行除法运算时遇到编译错误。通过在转换和乘法操作中使用(long)进行强制类型转换,问题得到解决。这一解决方案来自于一位QQ群成员的无私帮助。

          下面是我的一段LED显示的代码,要求为显示数码管共8个,显示浮点型数据前五个是整数部分,后三个显示小数部分,因为考虑是8个数码管,用int型数据有溢出,故选用long型数据,程序开始为:

 

void LED(float ttime)
{
long int t,p;
void Led_init(void);
delay10ms(10);
ttime=ttime*1000;               // line 241

t=ttime/10000000;
p=ttime%10000000;             //line 244

Write7279(DECODE1,t);
t=p/1000000;
p=p%1000000;
Write7279(DECODE1+1,t);
delay10ms(10);
t=p/100000;
p=p%100000;
Write7279(DECODE1+2,t);
delay10ms(10);
t=p/10000;
p=p%10000;
Write7279(DECODE1+3,t);
delay10ms(10);
t=p/1000;
p=p%1000;
Write7279(DECODE1+4,t|0x80);
delay10ms(10);
t=p/100;
p=p%100;
Write7279(DECODE1+5,t);
delay10ms(10);
t=p/10;
p=p%10;
Write7279(DECODE1+6,t);
delay10ms(10);
t=p;
Write7279(DECODE1+7,t);
delay10ms(10);
}

 

编译后有一处错误,错误为:

line 244: error: expression must have integral type

于是我强制转换ttime在241行,用的是(long)ttime=ttime*1000;结果不可以。

花了我几小时,查谭浩强的书,上网找答案,最后在一个qq群有个好心的哥们给解决了:下面是我们的qq对话:

巴克 9:31:59 
你那个是数据类型不对吧。
Will 9:32:12 
是啊,但我找不到原因
Will 9:32:18 
用了long int
Will 9:32:31 
是32位了应该不会溢出
巴克 9:32:43 
这个你得强制装换下就好啦
Will 9:33:20 
强制转换哪一个
Will 9:33:30 
ttime吗
巴克 9:33:35 

(long)ttime = ttime*1000
Will 9:33:44 
我试过了
Will 9:34:04 
不可以
巴克 9:34:25 
那你转换t、p呢?
Will 9:34:45 
expression has no effect
巴克 9:35:00 
t=(long)ttime/10000000;

巴克 9:35:28 
这样试过没?

Will 9:35:36 
我试一下
巴克 9:36:11 
直接转换这个就可以啦,上面那个ttime不用转换
Will 9:36:22 
成功了
Will 9:36:29 
这样可以
Will 9:36:47 
奇怪,为什么前面的转化不可以呢
巴克 9:38:37 
前面那个如果你再设置一个long型变量。
比如 ss=(long)ttime*1000;
这样也可以。
巴克 9:39:12 
t = ss/10000000;
.
.
.
.
Will 9:39:29 
恩,我了解了,谢了
Will 9:39:40 
困扰我几个小时,这个小问题
巴克 9:41:13 
一般语法和数据类型的问题比较好找。只要你仔细点儿。
巴克 9:43:05 
数码管的小数点完全可以不用float型。运算量太大。用long型完全可以代替。小数点儿你可以最后弄个位置变量。完后需要在哪里加就直接给数就好啦。祝你成功!
Will 9:45:45 
好的,谢谢

 

 

后来就在243和244行ttime前加了(long)进行强制转换就可以了,编译后就没有错误了。非常感谢这个叫巴克的哥们,感谢这些无私的answer man。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值