博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BigInteger实现原理
阅读量:5934 次
发布时间:2019-06-19

本文共 1490 字,大约阅读时间需要 4 分钟。

hot3.png

  • 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数组转换为原来的数串

  • 不断做除法取余

转载于:https://my.oschina.net/u/3847203/blog/1816213

你可能感兴趣的文章
Vue.js单向绑定和双向绑定实例
查看>>
每天一道leetcode88-合并两个有序数组
查看>>
Netty学习笔记
查看>>
java B2B2C 仿淘宝电子商城系统-Spring Cloud与Dubbo对比
查看>>
新氧大数据:2.8%城市占53.7%医美医生,咋找靠谱医生?
查看>>
双重夹击之下,优信如何走出困局?
查看>>
SpringMVC学习笔记1(整合Mybatis&参数绑定)
查看>>
Apple Pay接入详细教程(转)
查看>>
UWP 开发中阶 Chapter 2 - 通过 KeyFrame 实现更复杂的 Storyboard Animation
查看>>
企业级 SpringBoot 教程 (十七)上传文件
查看>>
var,let,const的区别
查看>>
vue 富文本编辑器 vue-quill-editor
查看>>
NEO从源码分析看共识协议
查看>>
macOS系统下安装Homebrew
查看>>
vue-cli创建的项目,如何让键盘监听事件,只在一个页面(url)内有效,如下图和代码...
查看>>
项目中引入特殊字体【小程序、h5】包括canvas画图
查看>>
React-Router 杂记
查看>>
react项目运用BrowserRouter上线后在非根路由情况下刷新出现404问题的解决方法 -- Koa...
查看>>
什么是以太坊
查看>>
94. Binary Tree Inorder Traversal
查看>>