Int32的范围

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

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

技术问答题

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

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。

写在最后

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