[STC单片机] 一个奇怪的问题

[复制链接]
896|4
 楼主| tianxiongweitxw 发表于 2020-8-9 15:20 | 显示全部楼层 |阅读模式
AD, iap, OCL, TE, ck
本帖最后由 tianxiongweitxw 于 2020-8-9 15:58 编辑

请教一下前辈:以下算法
a1=(IapReadByte(Oclock_Hour)>>4)*10*60;
b1=(IapReadByte(Oclock_Hour)&0x0f)*60 ;
c1=(IapReadByte(Oclock_Minu)>>4)*10 ;
d1=IapReadByte(Oclock_Minu)&0x0f;
hour_adjust=HEXtoBCDData((a1+b1+c1+d1-5)/60);  
这样写,hour-adjust结果正确。改成下面就不正确(把a b c d同时加在一起):
hour_adjust=HEXtoBCDData((((IapReadByte(Oclock_Hour)>>4)*10*60+ (IapReadByte(Oclock_Hour)&0x0f)*60 +(IapReadByte(Oclock_Minu)>>4)*10+IapReadByte(Oclock_Minu)&0x0f )-5)/60);   
难道有溢出,才这么几个算式,没有道理?
ayb_ice 发表于 2020-8-10 08:33 | 显示全部楼层
这取决于变量的类型定义
 楼主| tianxiongweitxw 发表于 2020-8-10 12:07 | 显示全部楼层
函数IapReadByte返回字节。a b c d是unsigned INT
ayb_ice 发表于 2020-8-10 13:10 | 显示全部楼层
tianxiongweitxw 发表于 2020-8-10 12:07
函数IapReadByte返回字节。a b c d是unsigned INT

有些地方强制转换下
hour_adjust=HEXtoBCDData((((IapReadByte(Oclock_Hour)>>4)*(u16)10......
 楼主| tianxiongweitxw 发表于 2020-8-10 16:02 | 显示全部楼层
查了资料,确实是溢出了,谢谢AYB
您需要登录后才可以回帖 登录 | 注册

本版积分规则

73

主题

521

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部