↑↓ 选择 · ↵ 打开 · 共索引 374 篇

    Int32的范围

    ARCHIVE 这篇写于 2016 年,距今 10 年多了。里面的版本、链接和做法可能都已经过时,看的时候留个心眼。

    昨天给大家出了一个小问答题,不知道大家有没有看。

    今天我就对这个问题进行一些简单说明,希望对你的开发能够有一些帮助。

    技术问答题

    以下程序,你觉得他有没有问题?

    internal := util.GetCurrTs() - xxx.LastMarkTs() xCount := internal * 1000 / 178000

    注: util.GetCurrTs()–获取当前时间戳,参考值:1459947087 xxx.LastMarkTs()–上一次标记时间,参考值:1456941600 根据参考值,你的运算结果是多少?

    很可能的答案是:16884

    但是实际上答案是-7244

    原因是

    // int32 is the set of all signed 32-bit integers.
    // Range: -2147483648 through 2147483647.
    type int32 int32
    

    internal*1000=3005487000 2147483647

    结果为:-1289480296

    这个值是超过了int32的最大值:2147483647,对应时间为:2038/1/19 11:14:7

    如果大家还在用int32做时间戳的,一定要记得它的时间范围只能到2038/1/19 11:14:7

    时间戳用整型,应该用int64。

    写在最后

    茶歇驿站,一直在坚持,一直也在提高博文的质量,谢谢大家一直以来的关注和建议。现在你们可以直接给我提意见了,我也会保证每天都上去看看的,不然遗漏了大家的消息,就愧对这来之不易的原创、留言功能了。