纪元时间的% 2147483647L 是什么意思?



我刚刚遇到了在Android中生成通知ID的问题。

我正在经历一些通知处理-sdk,他们正在使用以下代码来生成通知ID:

private int generateTimestampId() {
return (int)(new Date().getTime() % 2147483647L);
}

这可能是很好的解决方案,但我无法理解% 2147483647L在时代背景下代表什么

(请注意:new Date().getTime()返回自 1970 年 1 月 1 日 00:00:00 GMT 以来的毫秒数(

可以这样做以防止将long缩小到int时会发生负值。请考虑以下代码:

long value = 1L + Integer.MAX_VALUE; // anything past max integer
int i1 = (int) value; // -2147483648
int i2 = (int) (value % 2147483647L); // 1

使用% 2147483647L代码可确保数字始终小于Integer.MAX_VALUE,这是2147483647,然后才能缩小到int

在生成的 id 上下文中或多或少是有意义的,我们很少在此用例中使用负数。

相关内容

  • 没有找到相关文章

最新更新