biginteger 原理_BigInteger实现原理

biginteger 原理_BigInteger实现原理BigInteger 存储大数的方式就是将数字存储在一个整型的数组中只用一个整型数组的话 如何表示一个整数的正负呢 那么就需要有一个单独的成员变量来标明该数的正负 10 9 2 10 9 最终从整体上来看 mag 数组保存的是一个 10 9 进制的数 1 以前把数字存在字符串中 大数之间的四则运算及其它运算都是通过数组完成 2 JDK 实现

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

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

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

*(10^9)^2 +*(10^9)+,最终从整体上来看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(“”);

System.out.println(bigInteger);

}

//实现,10代表十进制

public BigInteger(String val) {

this(val, 10);

}

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

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

jdk将 4878 分为 | | 保存

mag[0]保存 ,mag[1]保存 ,mag[2]保存

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

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

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

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

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

不断做除法取余

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223309.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午2:22
下一篇 2026年3月17日 下午2:22


相关推荐

  • 三星ODIN刷机包的修改

    三星ODIN刷机包的修改SunnyOK系列讲座索引【第一讲】如何用Odin刷机-新手必读http://bbs.gfan.com/android-1653492-1-1.html【第二讲】I897卡刷或CWM刷机教程http://bbs.gfan.com/android-1701867-1-1.html【第三讲】APK应用程序的解包、修改、编辑、打包及应用http://bbs

    2022年7月21日
    21
  • 新手coze扣子SDK保姆级部署,并且使用Jwt会话隔离

    新手coze扣子SDK保姆级部署,并且使用Jwt会话隔离

    2026年3月12日
    1
  • mysql和mongodb的区别是什么_mongodb和mysql的区别是什么?区别详细介绍

    mysql和mongodb的区别是什么_mongodb和mysql的区别是什么?区别详细介绍对于mongodb和mysql你应该都很清楚了吧,那么他们两个之间的区别你知道吗?很多人对于mongodb和mysql的区别都不是很清楚,下面一起来了解一下吧。一、mongodb和mysql的区别有哪些?对于这两者的区别,我们可以从以下的九个方面来谈一下。1、数据库模型mongodb-非关系型;mysql-关系型;2、存储方式mongodb-以类JSON的文档的格式存储;mysql-不同引擎有不同…

    2022年6月23日
    30
  • 百度将发布新推理模型及Ernie 5.0,挑战DeepSeek与OpenAI

    百度将发布新推理模型及Ernie 5.0,挑战DeepSeek与OpenAI

    2026年3月12日
    3
  • 滑块验证码的识别

    滑块验证码的识别滑块验证码的识别前言一 滑块验证码的形式二 采用的方法 1 滑块图 背景图切分 2 模板匹配总结前言最近在一个比价的公司实习 公司里面主要使用爬虫来获取一件商品在其他平台的价格 但是在大部分的时候别的平台不愿意把价格数据直接给你 他们会进行一些反爬的手段 例如使用验证码 验证码有很多的类型 今天主要来说说遇到的滑块验证码的识别 一 滑块验证码的形式滑块验证码的形式也很多 大多都类似下面这样的 一般类似这样的验证码已经有很成熟的解决方案了 比如 js 激活成功教程 图像识别激活成功教程等等 但是我在项目中遇到的验证码有一

    2025年8月9日
    5
  • c语言 const常量作用,C语言 const常量讲解

    c语言 const常量作用,C语言 const常量讲解const 的本质 const 本质上是伪常量 无法用于数组初始化以及全局变量初始化 原因在于 const 仅仅限定变量无法直接赋值 但是却可以通过指针间接赋值 例如局部常量在栈区 而不在静态区 静态区会一直存在 也不在代码区 代码区只读 禁止修改 include include const 与 define 的区别 defineX10 0constintY 9 0 赋值时会自动

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号