BigInteger存数据的方式

      问题源于一个面试问题,当一个long类型值乘以一个long类型的值,需要用什么来接收,当时第一时间想到用BigInteger类型来接收,但是面试官的问题并不是说让用封装完成的类来接收,一时语塞!!!说下BigInteger的存数据的方式,也没有答上来,回来研究BigInteger的底层操作才明白。

       其实在BigInteger中是使用int类型的数组来存储数据的,在源码中分析看到,这些int类型的数据也是通过二进制数位来实现的,

private BigInteger(long val) {
    if (val < 0) {
        val = -val;
        signum = -1;
    } else {
        signum = 1;
    }

    int highWord = (int)(val >>> 32);
    if (highWord == 0) {
        mag = new int[1];
        mag[0] = (int)val;
    } else {
        mag = new int[2];
        mag[0] = highWord;
        mag[1] = (int)val;
    }
}
       val是long类型的数据,共有8个字节,high word为前四个字节,存储到mag[0],后四个字节存储到mag[1]里面,从这个源码中我们也可以看出来,long数值要想获得后四个字节,直接转型为int就可以了。int的最大值为:2147483647。也就是mag[]里面可以放入2147483647个int值,每个int值为32位,mag[]可以表示的数组范围为:[-22147483647*32-1 ,22147483647*32-1 -1]

    其构造方法有很多,例如: BigInteger(String val),将 BigInteger 的十进制字符串表示形式转换为 BigInteger。BigInteger(String val, int radix)将指定基数的 BigInteger 的字符串表示形式转换为 BigInteger。如要将int型的2转换为BigInteger型,要写为BigInteger two=new BigInteger("2");


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值