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

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

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

BigInteger的创建:

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

BigInteger的输入输出:

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

BigInteger的比较:

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

BigInteger的运算:

  1. // 加
  2. BigInteger sum = bi1.add(bi2);
  3. // 减
  4. BigInteger sub = bi1.subtract(bi2);
  5. // 乘
  6. BigInteger mul = bi1.multiply(bi2);
  7. // 除
  8. BigInteger div = bi1.divide(bi2);
  9. // 取余
  10. BigInteger mod = bi1.remainder(bi2);
  11. // 除数与余数 result[0]是商,result[1]是余数
  12. BigInteger[] result = bi1.divideAndRemainder(bi2);
  13. // 幂
  14. BigInteger pow = bi1.pow(4);
  15. // 相反数
  16. BigInteger neg = bi1.negate();
  17. // 绝对值
  18. BigInteger abs = bi1.abs();
  19. // 最大公约数
  20. BigInteger gcd = bi1.gcd(bi2);

BigInteger转换为基本类型:

  1. byte byteValue = bi1.byteValue();
  2. byte byteValueExact = bi1.byteValueExact();
  3. short shortValue = bi1.shortValue();
  4. short shortValueExact = bi1.shortValueExact();
  5. int intValue = bi1.intValue();
  6. int intValueExact = bi1.intValueExact();
  7. long longValue = bi1.longValue();
  8. long longValueExact = bi1.longValueExact();
  9. float floatValue = bi1.floatValue();
  10. 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. guavacache源码阅读笔记

    guavacache源码阅读笔记 官方文档: https://github.com/google/guava/wiki/CachesExplained 中文版: https://www.jianshu ...

  2. 29.qt quick-在QML中调用C++类

    1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...

  3. 用好idea这几款插件,可以帮你少写30%的代码

    Easycode是idea的一个插件,可以直接对数据的表生成entity,controller,service,dao,mapper,无需任何编码,简单而强大. 1.安装(EasyCode) 我这里的 ...

  4. [apue] linux 文件访问权限那些事儿

    前言 说到 linux 上的文件权限,其实我们在说两个实体,一是文件,二是进程.一个进程能不能访问一个文件,其实由三部分内容决定: 文件的所有者.所在的组: 文件对所有者.组用户.其它用户设置的权限访 ...

  5. 日志挖掘针对DML语句

    作用: 针对用户的误操作,比如更改数据错误,误删除表等,可以用日志挖掘的方式,跟踪哪个用户什么时候做的操作,并进行数据还原. 一.前期准备: 1.添加最小补充日志,能够记录到更详细的信息,为日志挖掘分 ...

  6. Vue 前端权限控制的优化改进版

    1.前言   之前<Vue前端访问控制方案 >一文中提出,使用class="permissions"结合元素id来标识权限控制相关的dom元素,并通过公共方法check ...

  7. python3.6虚拟环境

    3.1.安装python3.6 [root@slavenode1 ~]# python -V Python 2.7.5 [root@slavenode1 ~]# yum install python3 ...

  8. Git&Gitlab开发流程与运维管理

    Git&Gitlab开发流程与运维管理 作者 刘畅 时间 2020-10-31 实验系统版本centos7.5 主机名称 ip地址 配置 安装软件 controlnode 172.16.1.1 ...

  9. 16、lamp的搭建

    搭建web02服务器作为web01的负载均衡服务器: httpd和nginx配置比较相似,也有虚拟主机,一个http服务需要配置多个站点,基于ip(基本用不到).端口(内部网站).域名(外部网站): ...

  10. HDU 1686 Oulipo kmp裸题

    kmp算法可参考 kmp算法 汇总 #include <bits/stdc++.h> using namespace std; const int maxn=1000000+5; cons ...