千家信息网

BigInteger的基本知识是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,BigInteger的基本知识是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。首先我们知道基本类型只能表示一定范围内的数值。byte
千家信息网最后更新 2026年11月01日BigInteger的基本知识是什么

BigInteger的基本知识是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

首先我们知道基本类型只能表示一定范围内的数值。

byte (-128-127);

long (-9223372036854774808~9223372036854774807)

如果超出范围了该怎么办呢? 比如如何来表示 123123456789123456789。

更正一下 ,signum 有三个取值 1,0,-1 .

mag 数组的定义是什么?

首先大数 123123456789123456789 对应的二进制为 1101010110010101110011000111001110100011001110111000101111100010101 , 共67位, 从后往前每32个bit位可以当作一个int进行存储 。 这应该是最节约内存的表示方式了 ,表示这个大数占用了16个字节 。

char[] arr = {'1','2','3','1','2','3','4','5','6','7','8','9','1','2','3','4','5','6','7','8','9'};   占用42个字节,所以不大会直接用一个char数组来表示大数

以下是计算出mag数组的算法,这是一个非常有意思的处理过程。

相信大家对如何将字符串"123" 转化为10进制整形123已经很熟悉了

public static void main(String[] args) {    String a = "123" ;    char[] chars = a.toCharArray() ;    int sum = 0;    int index = 0;    while (index

以下转换思路类似,只是稍微麻烦了一些些 。

1: 将123123456789123456789 分为三组 group0 = 123 , group1 = 123456789, group2 = 123456789 ;

其中group0 的长度为大数的length % 9, 其余 group的长度均为9 , 这个和 java int 的表示范围有关 。Integer.MAX_VALUE = 2147483647 恰好为10位, 因此每组取9个字符,在parse时不会存在溢出问题 。

int[] num = new int[3] ;

2:

2.1 num[2] = group0的int值 ; num[1] = 0 ; num[0] = 0 ;

2.2.1 long x = num[2] * 10 ^ 9 ; 123000000000 ; 一个long刚好8个字节 ,分为两个int存储 , (int) x 为x的后四个字节, x>>>32 为x的前四个字节。

num[2] = (int) x ;

long x = num[1] + x >>> 32 ;

num[1] = (int) x ;

long x = num[0] + x >>> 32 ;

num[0] = (int) x ;

2.2.2 long sum = num[2] + group1的int值

num[2] = (int) sum ;

sum = num[1] + sum >>> 32 ; 有可能有进位

num[1] = (int) sum ;

sum = num[0] + sum >>> 32 ; 有可能有进位

num[0] = (int) sum ;

重复2.2 的两个过程, 即可将一个字符串(大数)表示为整形数组 。

还有一些很细节的问题, 比如mag数组的大小,如果小了,肯定表示不了大数, 但是如果大了,对上面的算法毫无影响,最后只需去掉数组前面值为0的item即可 。

(2^n > 123123456789123456789 先求出最小的n 然后 【n/32 】 理论上是这样的,但是这个是无法实现的,因为此时 123123456789123456789是根本不存在的,如果存在也就不需要再表示了)。

((length * 3402 >>> 10 ) +1 + 31 ) >>> 5 , 为啥这个可以用来估算mag的长度,而且一定比需要的长度大或者等于。 我现在也没有弄明白,充满神秘感的东西才是这个世界上最好的东西 。

这两个过程我是看了n多遍才慢慢看懂的 。

接下来的问题:

1:如何将mag数组还原成一个字符串?如果不可逆那么这种表示方式没有任何意义。

2:如何实现加减乘除等运算 。

看完上述内容,你们掌握BigInteger的基本知识是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数组 大数 字节 问题 字符 长度 两个 字符串 范围 过程 基本知识 知识 东西 内容 方式 方法 更多 算法 存储 些些 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司的优势 今日互联网科技 互联网科技社 没上市的科技互联网公司 互联网的科技创新 华中科技大学互联网 栖莱科技互联网股份有限公司 彤创互联网科技有限公司 智腾互联网科技有限公司 和信科技工业互联网 互联网科技扶贫时间 互联网科技研发水平 21世纪互联网科技成就 本届互联网大会上的黑科技 易企秀互联网科技是做什么的 上海同邻互联网科技有限公司规模 互联网科技企业商标注意事项 现代互联网科技公司 河南商务圈互联网科技有限公司 互联网 科技节活动 微视频大赛 一五八零互联网科技 山东吉时兔互联网科技有限公司 广州慧亚互联网科技怎么样 字节跳动和互联网科技 成都互联网科技公司工作好不好 互联网科技圈年度人物 广西科技产业互联网是什么 唐山双旺合互联网科技产业园 科技互联网专业工作会议发言稿 恒生科技互联网指数十大成分股
0