The fucking TInt64

本文介绍了在Symbian系统中使用TInt64类型时遇到的连乘赋值问题及解决方法。当尝试直接使用连乘方式为TInt64变量赋值较大的数字时,会因为编译器按TInt32处理而导致溢出错误。文章提供了两种避免此问题的有效策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     TInt64是symbian中的长整型量。在需要较大的数字的时候,我们往往需要使用这个类型的变量。但是TInt64有一个特点,或者说是编译器有一个特点,就是不能直接使用连乘的方式给TInt64的变量赋值。


     在前一个项目中,我使用TInt64的变量作周期来控制频率。具体做法是比较2个TTime 变量,如果时间的差大于周期,那么开始下一次的动作。开始的时候我是这样做的:


     TInt64 cycle = 24 * 3600 * 1000000;


     原本cycle变量对应的是24小时。但是最后的结果是:动作每隔不到十分钟就会发生。经过逐步排查之后,把错误定位到cycle上面了。不看不知道,一看吓一跳啊。


     cycle = 500654080;


     比预想的86400000000小很多。为什么会出现这种结果呢?最后发现是编译器的问题,在进行连乘的时候,编译器按照TInt32的方式存取数据,最后将结果赋值给TInt64变量。这样,如果在连乘的过程中,出现了溢出的问题,那么最后的结果就会是错误的。


     怎么办呢,可以使用2种方式:
     1、 TInt64 a = 24 * 3600;
           a *= 1000000;


     2、 TInt64 a1 = 24 * 3600;
           TInt64 a2 = 1000000;
           TInt64 a = a1 * a2;


     其实这2个方法本质上是一样的,都是为了避免溢出的问题。这里的溢出问题是通过连乘之后将结果赋值给TInt64的变量所产生的。希望大家从我这里吸取了这个教训。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值