对于Java来说,有4种常用的表示整数的数据类型,分别为:byte、short、int和long,它们分别占1个字节、2个字节、4个字节和8个字节。也就是说,最大可表示的整数范围是2的64次方。如果想表示更大的数字,则会出现问题。为了解决这个问题,于是便有了BigInteger类。
对于BigInteger类来说,有如下的常用的构造器:
-
public BigInteger(String val):传入字符串,默认使用十进制
-
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的一些常用方法。
- 常用的静态方法
-
public static BigInteger valueOf(long val):该方法是将一个long类型的数字转换为BigInteger对象
-
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()));
-
}
-
}
-
}
执行结果如下图所示:
- 算术运算
-
public BigInteger add(BigInteger val):返回和另一个BigInteger对象相加的和
-
public BigInteger subtract(BigInteger val):返回和另一个BigInteger对象相减的差
-
public BigInteger multiply(BigInteger val):返回和另一个BigInteger对象相乘的积。
-
public BigInteger divide(BigInteger val):返回和另一个BigInteger对象相除的值
-
public BigInteger remainder(BigInteger val):返回和另一个BigInteger对象求余的值。
-
public BigInteger mod(BigInteger m):返回和另一个BigInteger对象求模的值。
-
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));
-
}
-
}
执行结果如下图所示:
- 位运算
-
public BigInteger and(BigInteger val):和另一个对象进行且运算
-
public BigInteger or(BigInteger val) :和另一个对象进行或运算
-
public BigInteger not() :进行取反运算
-
public BigInteger andNot(BigInteger val):先对传入的对象取反后再进行且运算。
-
public BigInteger shiftLeft(int n):向左移动n位(二进制表示的时候)
-
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));
-
}
-
}
执行结果如下图所示:
- 取最大或最小值
-
public BigInteger max(BigInteger val):判断该对象是否比另一个对象大。
-
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));
-
}
-
}
执行结果如下图所示:
- 转换成指定的整数类型
-
public byte byteValue():转换为byte类型
-
public short shortValue():转换为short类型
-
public int intValue():转换为int类型
-
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());
-
}
-
}
执行结果如下图所示:
- 其他
-
public int bitCount():返回该对象转换为二进制数之后,1的个数。
-
public int bitLength():返回该对象转换为二进数之后的所占位数。
-
public BigInteger gcd(BigInteger val):求和另一个BigInteger对象的最大公约数
-
public BigInteger abs() :返回该对象的绝对值
-
public BigInteger pow(int exponent) :求该对象的幂运算
-
public int signum():判断该对象的正负,1表示正,-1表示负。
-
public BigInteger sqrt():求该对象的平方根。
-
public BigInteger negate():将该值取反。若本身为正数,获取其对应的负数。若本身为负数,则获取其对应的正数。
-
public BigInteger nextProbablePrime(): 获取紧邻该整数的一个素数。
-
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的简单使用就已经介绍完毕了。
转载:https://blog.csdn.net/YP_W_Ricardo/article/details/105909659
查看评论