Java中操作超大数的方法

 更新时间:2018年06月13日 08:14:44   投稿:laozhang  
本篇文章是小编在网上整理的关于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();

相关文章

  • springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码

    springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码

    ThreadLocal 为变量在每个线程中创建了一个副本,这样每个线程都可以访问自己内部的副本变量,这篇文章主要介绍了springboot登录拦截器+ThreadLocal实现用户信息存储的实例代码,需要的朋友可以参考下
    2024-03-03
  • Spring Boot打jar包后配置文件的外部优化配置方法

    Spring Boot打jar包后配置文件的外部优化配置方法

    这篇文章主要介绍了Spring Boot打jar包后配置文件的外部优化配置方法,需要的朋友可以参考下
    2018-02-02
  • JAVA实现单例模式的四种方法和一些特点

    JAVA实现单例模式的四种方法和一些特点

    JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下
    2013-03-03
  • Java语言Lang包下常用的工具类介绍

    Java语言Lang包下常用的工具类介绍

    这篇文章主要介绍了Java语言Lang包下常用的工具类介绍,次奥变觉得挺不错的,这里分享给大家,需要的朋友可以参考下。
    2017-10-10
  • Java多线程中的Future类详细解读

    Java多线程中的Future类详细解读

    这篇文章主要介绍了Java多线程中的Future类详细解读,Future表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作,需要的朋友可以参考下
    2023-11-11
  • Java实现飞机大战游戏 附完整源码

    Java实现飞机大战游戏 附完整源码

    这篇文章主要介绍了Java实现飞机大战游戏,本文给大家分享完整源代码和效果图展示,对java飞机大战游戏实现代码感兴趣的朋友一起看看吧
    2022-05-05
  • 详解Java事件编程的使用

    详解Java事件编程的使用

    Java事件在很多地方都可以使用,合理的使用事件编程,相比常规逻辑的编程,这可达到主次分明,让程序吞吐量即处理能力更强,改动更少,下面我们举一个例子说明如何使用Java使用,需要的朋友可以参考下
    2021-06-06
  • 基于Spring中的线程池和定时任务功能解析

    基于Spring中的线程池和定时任务功能解析

    下面小编就为大家带来一篇基于Spring中的线程池和定时任务功能解析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java使用httpRequest+Jsoup爬取红蓝球号码

    Java使用httpRequest+Jsoup爬取红蓝球号码

    本文将结合实例代码,介绍Java使用httpRequest+Jsoup爬取红蓝球号码,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • Java中关键字synchronized的使用方法详解

    Java中关键字synchronized的使用方法详解

    synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块,下面这篇文章主要给大家介绍了关于Java中synchronized使用的相关资料,需要的朋友可以参考下
    2021-08-08

最新评论