BigInteger使用简介

对于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的简单使用就已经介绍完毕了。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值