BigInteger存储大数的方式就是将数字存储在一个整型的数组中

只用一个整型数组的话,如何表示一个整数的正负呢?

那么就需要有一个单独的成员变量来标明该数的正负。

18927348*(10^9)^2 +347389543*(10^9)+834934878,最终从整体上来看mag数组保存的是一个10^9进制的数.

1、以前把数字存在字符串中,大数之间的四则运算及其它运算都是通过数组完成;

2、JDK实现,那就是BigInteger;

3、BigInteger已实现的接口:Serializable, Comparable

4、signum属性是为了区分:正负数和0的标志位,整数用1表示,负数用-1表示,零用0表示

5、mag是magnitude的缩写形式,mag数组存储BigInteger数值大小

big-endian的顺序,即:高位字节存入低地址,低位字节存入高地址,依次排列的方式

little-endian正好相反

构造方法1

public BigInteger(byte[] val) {

if (val.length == 0)

throw new NumberFormatException("Zero length BigInteger");

if (val[0] < 0) {

mag = makePositive(val); //这个函数的作用是将负数的byte字节数组转换为正值。

signum = -1; //如果数组第一个值为负数,则将数组变正存入mag,signum赋-1

} else {

mag = stripLeadingZeroBytes(val);//如果非负,则可直接去掉前面无效零,再赋给mag

signum = (mag.length == 0 ? 0 : 1);

}

}

构造方法2:直接字符串转BigInteger

public static void main(String[] args) {

BigInteger bigInteger = new BigInteger("123456789987654321123456789987654321123456789987654321");

System.out.println(bigInteger);

}

...

//实现,10代表十进制

public BigInteger(String val) {

this(val, 10);

}

java中int表示-2^31至2^31-1 即-2147483648~2147483647

一个int值最多可保存一个10位十进制的整数,存在溢出,保存9位最好

jdk将 18927348347389543834934878 分为18927348 | 347389543 | 834934878保存

mag[0]保存18927348 ,mag[1]保存347389543 ,mag[2]保存834934878

6、BigInteger是不可变的任意精度的整数

7、以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)

8、BigInteger 提供所有 Java 的基本整数操作符的对应物

9、并提供 java.lang.Math 的所有相关方法

10、如何mag数组转换为原来的数串

不断做除法取余

biginteger 原理_BigInteger实现原理相关推荐

  1. grpc通信原理_容器原理架构详解(全)

    目录 1 容器原理架构 1.1 容器与虚拟化 1.2 容器应用架构 1.3 容器引擎架构 1.4 Namespace与Cgroups 1.5 容器镜像原理 2 K8S原理架构 2.1 K8S主要功能 ...

  2. BC之SC:区块链之智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图

    BC之SC:区块链之智能合约--与传统合约的比较以及智能合约模型部署原理.运行原理相关配图 目录 SC与传统合约的比较 SC模型部署原理.运行原理 SC与传统合约的比较 1.传统合约VS智能合约  特 ...

  3. 真香定律!Android动态换肤实现原理解析,原理+实战+视频+源码

    自己项目中一直都是用的开源的xUtils框架,包括BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下xUtils的 ...

  4. mapreduce原理_Hbase Bulkload 原理面试必备

    当需要大批量的向Hbase导入数据时,我们可以使用Hbase Bulkload的方式,这种方式是先生成Hbase的底层存储文件 HFile,然后直接将这些 HFile 移动到Hbase的存储目录下.它 ...

  5. kafka分区与分组原理_Kafka工作原理

    Kafka工作原理 Kafka工作原理 4.1. topic和消息 4.2. Producer 4.3. Consumer 4.4. Kafka核心特性 4.5. consumer.consumer ...

  6. 【重难点】【JUC 04】synchronized 原理、ReentrantLock 原理、synchronized 和 Lock 的对比、CAS 无锁原理

    [重难点][JUC 04]synchronized 原理.ReentrantLock 原理.synchronized 和 Lock 的对比.CAS 无锁原理 文章目录 [重难点][JUC 04]syn ...

  7. bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...

    bootloader功能介绍 初始化开发板上主要硬件(时钟,内存,硬盘), 把操作系统从硬盘拷贝到内存,然后让cpu跳转到内存中执行操作系统. boot阶段 1.关闭影响CPU正常执行的外设 -关闭看 ...

  8. TRIZ系列-创新原理-14~15-曲面化原理和动态性原理

    一.曲面化原理的表述如下 1)用曲线部件代替直线部件,用球面代替平面,用球体代替立方体: 2)采用滚筒,球体,螺旋体: 3)利用离心力,用旋转物体代替直线运动 由于TRIZ的创新原理是基于专利分析的基 ...

  9. 分类计数原理与分步计数原理_分类计数原理与分步计数原理

    分类计数原理与分步计数原理 <分类计数原理与分步计数原理 ( 一 ) >教学设计 柳州地区民族高级中学 覃艳莉 相关教材 : 人民教育出版社的全日制普通高级中学教科书 ( 必修 ) < ...

最新文章

  1. Qt 学习之路:模型-视图高级技术
  2. 步步为营-68-asp.net简单练习(get set)
  3. 李宏毅线性代数笔记2: 线性方程组和数域
  4. C语言回调函数demo(帮助理解)以海康isapiExternDemo回调函数为例
  5. 左操作数必须为左值_进入“左转弯待转区”被罚怎么回事?
  6. Springsecurity-oauth2之/oauth/token的处理
  7. 安装openstack时遇到的错误
  8. POJ3349 哈希算法
  9. Webservice学习之——即时发布与定制发布
  10. 任正非回应一切:今天的困难十多年前就有预计(附问答实录)
  11. Oracle 12导出、导入数据
  12. java私塾 代码_【整理】java私塾教程课后习题
  13. vsftpd 配置-使用虚拟账户登录
  14. Java编程必备软件
  15. C# NotifyIcon(通知区图标动画)
  16. ACM入门之新手入门
  17. 前端分页加载功能实现?
  18. 国家/地区 语言缩写代码 查询备用
  19. shipyard安装不迷茫
  20. python海龟教程_Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 7. 条件循环...

热门文章

  1. Windows ce6.0 安装过程!
  2. layui取input name_layui列表如何取input框的值
  3. SQL server 触发器 instead of
  4. PHP GETWAY
  5. [原创]桓泽学音频编解码(2):AC3/Dolby Digital 系统算法分析
  6. 全新C/C++发展路线,看这里
  7. 基于python的排课表系统_利用python爬取广西科技大学教务管理信息系统班级课表...
  8. PLUS模型教程3:用地扩张分析策略(LEAS)
  9. 图像去水印——opencv实现
  10. android手机避免不必要的流量,如何防止手机偷跑流量?小米手机防止流量偷跑的设置技巧...