溢出警告

       最近开发一个GPS同步FPGA时间的功能,需求是将GPS时间写入到FPGA配置好的32位寄存器中。给的需求是时间精度微秒,范围是0~1小时(但GPS输出时间精度也只有1ms……)。在写入寄存器过程中为了测试60*60*1000*1000微秒是否溢出。写了如下demo。

int main(int argc, char* argv[])

{

    unsigned int value;

    value = 60 *60 *1000 *1000 ;

    printf("value = %x\n", value);

}

       编译爆出一个警告,如下图所示,但是value值对应的十六进制是0xd693a400并没有超过32位,为什么会有如下警告呢。


       最后在CSDN上查找 到了参考解释,可以作为参考 。我的理解是,编译器,会申请一个变量来存放这个数60*60*1000*1000,且默认是int型变量来存,对于60*60*1000*1000,肯定超过了int型变量的范围,所以给出了警告。因此我们需要做的是告诉编译器用unsigned int或者long long来存储该变量。因此,如下修改就是正确的,没有警告。其实这与编译器有一定的关系,毕竟用什么来存储是与编译器有关的,而编译器又和硬件平台相关,所以有了如下链接所示的讨论。

int main(int argc, char* argv[])

{

    unsigned int value;

    value = 60u *60u *1000u *1000u ;

    value = 60ll*60ll*1000ll*1000ll;

    printf("value = %x\n", value);

}

参考:http://bbs.csdn.net/topics/370186977

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值