基本类型int有32位,范围是:[-2147483648, 2147483647](正负21亿多)

基本类型long有64位,范围是:[-9223372036854775808, 9223372036854775807]

虽然double可以表示更大的范围,但是却不是精确的整数。因此当需要使用到超出范围的整数时,就需要“大整形”。Java 中的大整形类java.math.BigInteger没有范围限制,使用方法如下:

BigInteger的创建:

BigInteger bi1 = new BigInteger("123");
BigInteger bi2 = BigInteger.valueOf(234L); BigInteger zero = BigInteger.ZERO;
BigInteger one = BigInteger.ONE;
BigInteger ten = BigInteger.TEN;

BigInteger的输入输出:

// 控制台读入大整数
Scanner scanner = new Scanner(System.in);
BigInteger bi3 = scanner.nextBigInteger();
BigInteger bi4 = new BigInteger(scanner.nextLine());
// 控制台输出
System.out.println(bi1);
System.out.println(bi1.toString()); // 10进制
System.out.println(bi1.toString(2)); // 2进制
// 二进制位数
int len = bi1.bitLength();

BigInteger的比较:

boolean equals = bi1.equals(bi2);
int cmp = bi1.compareTo(bi2);

BigInteger的运算:

// 加
BigInteger sum = bi1.add(bi2);
// 减
BigInteger sub = bi1.subtract(bi2);
// 乘
BigInteger mul = bi1.multiply(bi2);
// 除
BigInteger div = bi1.divide(bi2);
// 取余
BigInteger mod = bi1.remainder(bi2);
// 除数与余数 result[0]是商,result[1]是余数
BigInteger[] result = bi1.divideAndRemainder(bi2);
// 幂
BigInteger pow = bi1.pow(4);
// 相反数
BigInteger neg = bi1.negate();
// 绝对值
BigInteger abs = bi1.abs();
// 最大公约数
BigInteger gcd = bi1.gcd(bi2);

BigInteger转换为基本类型:

byte byteValue = bi1.byteValue();
byte byteValueExact = bi1.byteValueExact();
short shortValue = bi1.shortValue();
short shortValueExact = bi1.shortValueExact();
int intValue = bi1.intValue();
int intValueExact = bi1.intValueExact();
long longValue = bi1.longValue();
long longValueExact = bi1.longValueExact();
float floatValue = bi1.floatValue();
double doubleValue = bi1.doubleValue();

其中,大整形超出相应基本类型时截断高位,超出浮点型的范围时为InfinityxxxValueExact()方法则是抛出ArithmeticException异常。

Java大整形BigInteger的用法的更多相关文章

  1. Java开发笔记(二十九)大整数BigInteger

    早期的编程语言为了节约计算机的内存,给数字变量定义了各种存储规格的数值类型,比如字节型byte只占用一个字节大小,短整型short占用两个字节大小,整型int占用四个字节大小,长整型long占用八个字 ...

  2. java大数字操作:BigInteger,BigDecimal(浮点型)

    java大数字操作: BigInteger:大数字整型的 BigDecimal(浮点型):大数字小数的,也适用大的整数 BigInteger: String num1 = "10038182 ...

  3. Java中的Socket的用法

                                   Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...

  4. 【转】Java 枚举7常见种用法

    原文网址:http://softbeta.iteye.com/blog/1185573 Java 枚举7常见种用法 博客分类: java java枚举enmu  原创地址:http://blog.li ...

  5. 【44】java大数值剖析

    基本的整数和浮点型精度不能满足需求,那么可以使用java.math中的两个类:BigInteger和BigDecimal. BigInteger和BigDecimal介绍: 这两个类可以处理包含任意长 ...

  6. JAVA中mark()和reset()用法

    根据JAVA官方文档的描述,mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效.如果在mark后读取超过rea ...

  7. Java中的BigInteger在ACM中的应用

    Java中的BigInteger在ACM中的应用 在ACM中的做题时,常常会遇见一些大数的问题.这是当我们用C或是C++时就会认为比較麻烦.就想有没有现有的现有的能够直接调用的BigInter,那样就 ...

  8. 记一起Java大对象引起的FullGC事件及GC知识梳理

    背景 最近发生了一起 Java 大对象引起的 FullGC 事件.记录一下. 有一位商家刷单,每单内有 50+ 商品.然后进行订单导出.订单导出每次会从订单详情服务取100条订单数据.由于 100 条 ...

  9. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

随机推荐

  1. spring boot 加载web容器tomcat流程源码分析

    spring boot 加载web容器tomcat流程源码分析 我本地的springboot版本是2.5.1,后面的分析都是基于这个版本 <parent> <groupId>o ...

  2. MySQL 为什么使用 B+ 树来作索引?

    什么是索引? 所谓的索引,就是帮助 MySQL 高效获取数据的排好序的数据结构.因此,根据索引的定义,构建索引其实就是数据排序的过程. 平时常见的索引数据结构有: 二叉树 红黑树 哈希表 B Tree ...

  3. Java 提效神器 Stream 的冷门技巧

    Stream 使用这个方法创建一个 Stream 对象. new ArrayList<>().stream() Filter 过滤器,里面传递一个函数,这个函数的返回结果如果为 true ...

  4. Unity3D 本地数据持久化几种方式

    下面介绍几种 Unity本地记录存储的实现方式. 第一种 Unity自身提供的 PlayerPrefs //保存数据 PlayerPrefs.SetString("Name",mN ...

  5. SpringBoot缓存管理(一) 默认缓存管理

    前言 Spring框架支持透明地向应用程序添加缓存对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法(包括增删查改等),从而减少操作数据的执行次数(主要是查询,直接从缓存中读取数据),同时不 ...

  6. Linux:linux网路路由命令

    查看路由 #查看所有路由信息 route -n 删除路由 #删除路由 route del default 修改路由 #修改路由 #先删除路由 route del default #在新建 route ...

  7. Leetcode No.66 Plus One(c++实现)

    1. 题目 1.1 英文题目 Given a non-empty array of decimal digits representing a non-negative integer, increm ...

  8. mysql 索引介绍与运用

    索引 (1)什么是索引? 是一种提升查询速度的 特殊的存储结构. 它包含了对数据表里的记录的指针,类似于字典的目录. 当我们添加索引时会单独创建一张表来去存储和管理索引,索引比原数据大,会占用更多的资 ...

  9. k8s之deployment详解

    Deployment介绍 为了更好地解决服务编排的问题,k8s在V1.2版本开始,引入了deployment控制器,值得一提的是,这种控制器并不直接管理pod, 而是通过管理replicaset来间接 ...

  10. asp网页防止乱码

    <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <%Session.CodePage=65001%> ...