java - 如何使用java中的位操作来缩短长值?

标签 java long-integer bit

我想以较短的形式表示长值(例如 System.currentTimeInMillis() )。 我想我可以在这里使用位操作,但我被困住了。我不太擅长位操作。

如果 long 值为 1388534400000,我如何将其表示为字符串,但长度较短?

基本上我想编写两种方法,一种用于编码,一种用于解码。因此,给定一个缩短的值,我希望能够将其转换回原始的长值,反之亦然。

--------更新------------

我的问题非常模糊,对于造成的困惑我深表歉意。这是我的另一次尝试,以更好地解释我想要实现的目标。 (我也会尝试简化我的问题。我们不要考虑节省空间或保留到数据库)。

假设我有一个长值,它是以毫秒为单位的时间戳,例如 1388534400123,它是包含其他固定长度数值的较长字符串的一部分,例如(为了简单起见)999913885344001238888。在这种情况下,我填充了9999 和 8888。 现在我将其作为字符串,但我需要一个更短的表示形式,不会丢失任何原始数据(例如,我想要 9999、1388534400123 和 8888)。由于这些都是数字,我隐约认为我可以使用位来缩短表示形式。有什么办法吗?

最佳答案

如果我理解正确的话,你想要一个包含很长信息但比十进制格式的实际数字短的字符串。我建议您使用更高的基数来表示您的数字,例如十六进制。

您的号码 (1388534400000) 长度为 13 位。
十六进制为:1434B198400,长度为 11 位。
使用字母表中的所有字母(以 36 为基数),则为:HPVTJ400,长度为 8 位。

减少字符串中数字大小的另一种方法是确定您只想看到一些相关数字并使用科学记数法:

假设您只关心 6 位有效数字,那么您的数字将是:
1.38853E12,长度为 10 个字符,但比 36 进制数字更容易阅读。

关于java - 如何使用java中的位操作来缩短长值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643797/

相关文章:

java - TreeMap - 为什么即使在其中添加超过 2 个元素后它也只返回 1 的大小?

python - 解析 Yann LeCun 的 MNIST IDX 文件格式

c - 在 C 中激活数字的某些位

java - Web 服务不会减去字符串中的时间

java - Long.parseLong 错误

java - 为什么我的长整数会稍微改变一点?

php - MySQL select bit(1) 显示为 string(3)

java - 如何使用 shiftColumns 方法删除列

java - 我们可以仅使用 Vaadin 创建一个完全端到端的 Web 应用程序吗

java - 函数值总是乘以 2