Java中如何操作超大数

我们知道Integer的最大值是 2^31 - 1,Long最大值是 2^63 -1, 不管是32位机还是64位机都是这样, 通常来说我们要操作一个大于 Integer最大值的数的时候会用 Long来进行, 但万一我们遇到一个比 Long的最大值还大的数怎么办呢?

BigInteger

这种情况还是会出现的,对于操作超大数的情况 Java提供了 BigInteger类, 使用时需要实例化一个 BigInteger对象,调用它的运算方法进行加减等操作。 下面举个例子说明

操作 UUID

我们知道在Android设备中经常用 anroid_id 来表示设备的唯一性, 一般在安装 app的之后第一次启动时会调用下面的代码来生成一个设备编号,

String private_id = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);

然后把字符串通过持久化储存放到文件系统或者数据库中,日活等指标都可以依据这个来标识。 它的值通常是个十六进制数,比如

AF84C9117B6C98D2

把它转成十进制是

12647454730485537000

这已经超出了Long最大值的范围 9223372036854776000, 然后我们想在原有 android_id的基础上简单加密一下,比如加个随机数上去什么的,

String private_id = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
BigInteger androidId = new BigInteger(private_id, 16);
Random random = new Random();
BigInteger result = androidId.add(new BigInteger(String.valueOf(random.nextInt(10000)), 10));
String hex = result.toString();

原文发布于微信公众号 - Android每日一讲(gh_f053f29083b9)

原文发表时间:2018-06-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏coder修行路

通过Beego将之前实现的短url项目实现

正好通过这个小例子对之前了解的beego框架的基本内容进行一个简单的应用 实现的完整代码地址:https://github.com/pythonsite/go_...

29580
来自专栏尾尾部落

[剑指offer] 二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

22520
来自专栏瞎说开发那些事

[Java并发系列]Java并发容器和框架

24440
来自专栏Danny的专栏

【SpringDataJPA】——SpringDataJPA入门实例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

15520
来自专栏Java编程技术

并发队列-无界阻塞优先级队列PriorityBlockingQueue原理探究

PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最高的元素,是二叉树最小堆的实现,研究过数组方式存放最小堆节点的都知道,...

19630
来自专栏向治洪

Google protocol buffer简介

Google Protocol Buffer Google Protocol Buffer又简称Protobuf,它是一种很高效的结构化数据存储格式,一般用于结...

35260
来自专栏不会写文章的程序员不是好厨师

日志那些事儿——Logback源码解析

在上篇文章日志漫谈中谈到,日志在监控报警、查错分析等方面有着非常重要的应用。Logback作为目前最火的日志系统,本文就简单分析一下logback日志打印的过程...

53220
来自专栏xingoo, 一个梦想做发明家的程序员

基于Dubbo的http自动测试工具分享

公司是采用微服务来做模块化的,各个模块之间采用dubbo通信。好处就不用提了,省略了之前模块间复杂的http访问。不过也遇到一些问题: PS: Githu...

47480
来自专栏java思维导图

Java中高级面试题部分答案解析(1)

这里选几道常见的做一些答案解析,参考网络上优质的博客加一些理解。当然不一定全部正确,有一些是没有固定答案的,如果发现有错的或者更适合的答案欢迎留言矫正,就这样。

9320
来自专栏架构说

redis-哈希表自动扩容

@(架构说)[redis] 为了回答上次遗留问题 哈希表如何扩容问题? 重点内容: 1 注释代码:最新版本 https://github.com...

65030

扫码关注云+社区

领取腾讯云代金券