对于Java来说,有4种常用的表示整数的数据类型,分别为:byte、short、int和long,它们分别占1个字节、2个字节、4个字节和8个字节。也就是说,最大可表示的整数范围是2的64次方。如果想表示更大的数字,则会出现问题。为了解决这个问题,于是便有了BigInteger类。

对于BigInteger类来说,有如下的常用的构造器:

  1. public BigInteger(String val):传入字符串,默认使用十进制
  2. public BigInteger(String val, int radix):字符串和数字进制(例如二进制为2,八进制为8, 十进制为10等)

当然,BigInteger还有很多的构造器,一是不常用到,二嘛我也没琢磨明白怎么用,就不在这里班门弄斧了。

关于构造器的示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {String str = "121";System.out.println("\"121\"的的十进制的值为:" + new BigInteger(str));System.out.println("\"121\"的的八进制的值为:" + new BigInteger(str, 8));}
}

执行结果如下图所示:

需要强调一点的是,字符串的中的所有字符必须为数字,且必须在指定的进制表示范围之内,否则会抛异常。

接下来就简单说一说BigInteger的一些常用方法。

  • 常用的静态方法
  1. public static BigInteger valueOf(long val):该方法是将一个long类型的数字转换为BigInteger对象
  2. public static BigInteger probablePrime(int bitLength, Random rnd):获取指定位数的素数。需要注意的是,这里的位数是指转换为二进制之后的位数。

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b = BigInteger.valueOf(12);System.out.println("b的值为:" + b);for (int i = 0; i < 5; i++) {System.out.println("第" + (i + 1) + "次获取的素数为:" + BigInteger.probablePrime(5, new Random()));}}
}

执行结果如下图所示:

  • 算术运算
  1. public BigInteger add(BigInteger val):返回和另一个BigInteger对象相加的和
  2. public BigInteger subtract(BigInteger val):返回和另一个BigInteger对象相减的差
  3. public BigInteger multiply(BigInteger val):返回和另一个BigInteger对象相乘的积。
  4. public BigInteger divide(BigInteger val):返回和另一个BigInteger对象相除的值
  5. public BigInteger remainder(BigInteger val):返回和另一个BigInteger对象求余的值。
  6. public BigInteger mod(BigInteger m):返回和另一个BigInteger对象求模的值。
  7. public BigInteger[] divideAndRemainder(BigInteger val):返回一个BigInteger数组对象,其值为整除的值和摸。

这里需要说明的是,求模和求余在某些情况下是一样的。求余指的是数学概念,而求模指计算机概念。对于求模来说,要求除数不能为负数,且求模所得值也不会是负数。而求余则无此限制。

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = BigInteger.valueOf(12);BigInteger b2 = BigInteger.valueOf(5);// 加System.out.println("b1和b2的和为:" + b1.add(b2));// 减System.out.println("b1和b2的差为:" + b1.subtract(b2));// 乘System.out.println("b1和b2的积为:" + b1.multiply(b2));// 除System.out.println("b1和b2的商为:" + b1.divide(b2));// 求余System.out.println("b1和b2求余为:" + b1.remainder(b2));// 求商和余数System.out.println("b1和b2的商和余数为:" + Arrays.toString(b1.divideAndRemainder(b2)));// 求模和求余数的区别BigInteger b3 = BigInteger.valueOf(-12);System.out.println("b3和b2的求余为:" + b3.remainder(b2));System.out.println("b3和b2的求模为:" + b3.mod(b2));}
}

执行结果如下图所示:

  • 位运算
  1. public BigInteger and(BigInteger val):和另一个对象进行且运算
  2. public BigInteger or(BigInteger val) :和另一个对象进行或运算
  3. public BigInteger not() :进行取反运算
  4. public BigInteger andNot(BigInteger val):先对传入的对象取反后再进行且运算。
  5. public BigInteger shiftLeft(int n):向左移动n位(二进制表示的时候)
  6. public BigInteger shiftRight(int n):向右移动n位(二进制表示的时候)。

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = BigInteger.valueOf(4);BigInteger b2 = BigInteger.valueOf(5);// 且运算System.out.println("4 & 5结果为:" + (4 & 5));System.out.println("b1和b2且的结果为:" + b1.and(b2));// 或运算System.out.println("4 | 5结果为:" + (4 | 5));System.out.println("b1和b2或的结果为:" + b1.or(b2));// 非运算System.out.println("~4结果为:" + (~4));System.out.println("b1非运算的结果为:" + b1.not());// 且非运算System.out.println("4 & ~5结果为:" + (4 & ~5));System.out.println("b1和非b2且的结果为:" + b1.andNot(b2));// 左移运算System.out.println("4左移两位结果为:" + (4 << 2));System.out.println("b1左移两位结果为:" + b1.shiftLeft(2));// 右移运算System.out.println("4右移两位结果为:" + (4 >> 2));System.out.println("b1右移两位结果为:" + b1.shiftRight(2));}
}

执行结果如下图所示:

  • 取最大或最小值
  1. public BigInteger max(BigInteger val):判断该对象是否比另一个对象大。
  2. public BigInteger min(BigInteger val) :判断该对象是否比另一个对象小

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = BigInteger.valueOf(4);BigInteger b2 = BigInteger.valueOf(5);System.out.println("b1和b2中最大的值为::" + b1.max(b2));System.out.println("b1和b2中最小的值为::" + b1.min(b2));}
}

执行结果如下图所示:

  • 转换成指定的整数类型
  1. public byte byteValue():转换为byte类型
  2. public short shortValue():转换为short类型
  3. public int intValue():转换为int类型
  4. public long longValue() :转换为long类型

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = BigInteger.valueOf(4);System.out.println("BigInteger转byte:" + b1.byteValue());System.out.println("BigInteger转short:" + b1.shortValue());System.out.println("BigInteger转int:" + b1.intValue());System.out.println("BigInteger转long:" + b1.longValue());}
}

执行结果如下图所示:

  • 其他
  1. public int bitCount():返回该对象转换为二进制数之后,1的个数。
  2. public int bitLength():返回该对象转换为二进数之后的所占位数。
  3. public BigInteger gcd(BigInteger val):求和另一个BigInteger对象的最大公约数
  4. public BigInteger abs() :返回该对象的绝对值
  5. public BigInteger pow(int exponent) :求该对象的幂运算
  6. public int signum():判断该对象的正负,1表示正,-1表示负。
  7. public BigInteger sqrt():求该对象的平方根。
  8. public BigInteger negate():将该值取反。若本身为正数,获取其对应的负数。若本身为负数,则获取其对应的正数。
  9. public BigInteger nextProbablePrime(): 获取紧邻该整数的一个素数。
    
  10. public int compareTo(BigInteger val)

相关示例代码如下所示:

public class BigIntegerTest {public static void main(String[] args) {BigInteger b1 = BigInteger.valueOf(12);BigInteger b2 = BigInteger.valueOf(15);// 求转换为二进制后1的个数System.out.println("b1(12)转换为二进制后1的个数为:" + b1.bitCount());// 求转换为二进制后所占位数System.out.println("b1(12)转换为二进制后所占位数为:" + b1.bitLength());// 求两个数的最大公约数System.out.println("b1(12)和b2(15)的最大公约数为:" + b1.gcd(b2));// 求一个数的绝对值System.out.println("-4的绝对值为:" + BigInteger.valueOf(-4).abs());// 求一个数的幂System.out.println("b1(12)的2次方的值为:" + b1.pow(2));// 求一个数的符号(1表示正,-1表示负)System.out.println("3的表示正负的符号为:" + BigInteger.valueOf(3).signum());System.out.println("-3的表示正负的符号为:" + BigInteger.valueOf(-3).signum());// 求一个数的平方根System.out.println("4的平方根为:" + BigInteger.valueOf(4).sqrt());// 对该数取反(正变负,负变正)System.out.println("4取反后结果为:" + BigInteger.valueOf(4).negate());// 取该数之后理其最近的素数System.out.println("4后面距离4最近的素数为:" + BigInteger.valueOf(4).nextProbablePrime());// 比较两个数的大小(1表示大,-1表示小)System.out.println("b1(12)是否比b2(15)大?" + b1.compareTo(b2));}
}

执行结果如下图所示:

自此,关于BigInteger的简单使用就已经介绍完毕了。

BigInteger使用简介相关推荐

  1. java int biginteger_[十六]基础类型BigInteger简介

    public BigInteger(String val, int radix) { //定义了两个变量一个光标,光标记录着应该要处理的数据索引下标 //另一个numDigits 用来保存需要处理的数 ...

  2. pl/postgresql_PostgreSQL PL / java简介

    pl/postgresql 现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息将有所不同,但概念将相同 ...

  3. PostgreSQL PL / java简介

    现代数据库允许以多种语言编写存储过程. 一种常见的实现语言是java.NB,本文讨论了PostgreSQL特定的Java实现. 其他数据库的详细信息会有所不同,但是概念是相同的. PL / Java的 ...

  4. 从底层重学 Java 之 BigInteger 大整数 Gitchat连接

    Gitchat连接 https://gitbook.cn/gitchat/activity/5f395a80aced402379f6a0ca 简介 从底层,从原理,我们来重学一次 Java.BigIn ...

  5. Commons Configuration之一简介

    为什么80%的码农都做不了架构师?>>>    1    简介 Commons Configuration软件类库提供通用配置接口,使Java应用程序从多种源读取配置文件.Commo ...

  6. Freemarker 简介 及手册

    FreeMarker 手册 什么是FreeMarker? FreeMarker是一款模板引擎:即一种基于模板.用来生成输出文本(任何来自于HTML格式的文本用来自动生成源代码)的通用工具.它是为Jav ...

  7. easyexcel 简介、中文文档、中英对照文档 下载

    easyexcel 文档 下载链接(含jar包.源码.pom) 组件名称 中文-文档-下载链接 中英对照-文档-下载链接 easyexcel-3.0.5.jar easyexcel-3.0.5-API ...

  8. simHash 简介以及 java 实现

    转自: simHash 简介以及 java 实现 传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法.产生的两个签名,如果相等,说明原始内容在一定概 率 ...

  9. Java篇 - 最全BigInteger和BigDecimal实战

    最近公司在做一款区块链钱包,区块链上传输的数值都是很大的,大到几十位.用Java的基本类型是处理不了的,int占32位,long.double占64位,如果用这些基本数据类型运算的话,第一是存储不了这 ...

最新文章

  1. 手把手教你生信分析平台搭建
  2. linux 开机提示 Kernel panic - not syncing: Attempted to kill init! 解决方案
  3. windows 7关闭休眠
  4. 构建之法:1、2、3章阅读后感
  5. 【codevs2912】反素数,好好学习天天向上
  6. 微信网页开发 thinkphp5.0的try-catch和重定向
  7. 集中火力 专项击破|数据分析可视化广深线下培训火热来袭
  8. java实战——照片编辑器
  9. 用html设计前台界面,UI设计系列:WEB前端界面设计
  10. Excel 6位数字与MD5对照表 100000-999999
  11. 谷歌关闭音乐搜索服务
  12. python下拉框二级联动_Excel数据规范输入技巧 | 二级联动下拉菜单
  13. 家乡的春节html,家乡的春节日记
  14. 西游记笔记与想法(2)
  15. java脚本引擎Rhino 入门
  16. 图片拉伸和保持长宽比的问题
  17. Mac小技巧—如何查看 Mac 的关机和重启历史
  18. 运维GO-2021年书单-产品运营 篇
  19. 关于 “Ubuntu 18.04.2 LTS _Bionic Beaver_ - Release amd64 (20190210)” 的盘片插入驱动器“/cdrom/”再按「回车」键 的解决问题
  20. 利用管道检测技术成果对城市地下空洞进行筛查分析的探讨

热门文章

  1. No Excuse!不给自己任何借口
  2. 业务上云会面临哪些安全挑战?
  3. 全国各省(直辖市,自治区,特区)第一高楼
  4. 北戴河2日游之图解版(5.3--5.4) 每日一图
  5. NUC972-5寸电容屏-linux-drv-chrdevbase
  6. P1255 数楼梯(高精度)
  7. Cisco(2)——ping通用交换机连接的两台PC机
  8. 【用友U8】调拨单参照生产订单制单时,先扣减线边仓库存,再生成需仓库配发数量的调拨单(生产调拨模拟操作步骤)。
  9. 【lua】int64的支持
  10. 内部效度、外部效度的定义以及关系