无需登录 数据私有 本地保存

BigInt 在线计算器 - 任意大整数运算与进制转换

17
0
0
0
BigInt

JavaScript ES2020(ECMAScript 2020)引入的内置大整数数据类型,用于表示任意精度的整数。与 Number 类型不同,BigInt 没有精度上限,仅受系统可用内存限制。BigInt 字面量以 n 后缀结尾(如 42n),也可以通过 BigInt(42)BigInt("42") 构造函数创建。BigInt 和 Number 不能直接混合运算,必须先进行显式类型转换。在本工具中,所有计算均基于 BigInt 原生类型实现,确保结果的数学精确性,不会出现浮点数精度丢失问题。

安全整数(Safe Integer)

JavaScript Number 类型能够精确表示和运算的整数范围。安全整数的范围是 -(253-1) 到 253-1,即 -9007199254740991 到 9007199254740991。在此范围内的整数,Number 类型可以保证加减乘除等运算的精确性。超出此范围后,由于 IEEE 754 双精度浮点数的尾数只有 52 位(加上隐含的 1 位共 53 位),无法精确表示更大的整数,运算结果会出现精度丢失。BigInt 的引入正是为了解决超出安全整数范围的大数运算需求。本工具可以帮你验证哪些运算会超出安全整数范围。

进制转换(Base Conversion)

将一个数字从一种进制(基数)表示转换为另一种进制表示的过程。JavaScript 原生支持 2 到 36 进制的转换,使用 toString(radix) 方法将数字转为指定进制的字符串,使用 parseInt(string, radix) 将指定进制的字符串解析为数字。对于超出 Number 安全整数范围的大数,需要使用 BigInt 的 toString(radix) 方法。本工具的进制转换器封装了这些底层操作,提供了更友好的交互界面,支持 2-36 进制的任意互转,并能正确处理超大数字。

截断除法(Truncated Division)

BigInt 的除法运算(/)采用的除法策略。截断除法的结果是精确商向零取整,即去掉小数部分,保留整数部分。例如 -7n / 2n 的结果是 -3n(精确商为 -3.5,向零取整为 -3),而非 -4n(向下取整)。截断除法的余数通过 % 运算符获取,余数的符号始终与被除数相同:-7n % 2n = -1n7n % -2n = 1n。这是 BigInt 规范明确规定的除法行为,与某些大数库(如 Python 的整数除法)的向下取整行为不同。

二进制补码(Two's Complement)

计算机中表示有符号整数的最常用编码方式。正数的补码等于其原码(二进制表示本身),负数的补码等于其绝对值的原码按位取反后加 1。例如 -3 的 8 位补码为 11111101。BigInt 的位运算使用无限位宽的二进制补码表示,这意味着正数有无限个前导 0,负数有无限个前导 1。这与 Number 类型的 32 位固定位宽位运算有本质区别:例如 ~0n(BigInt)等于 -1n~0(Number)等于 -1,虽然结果数值相同,但底层二进制表示完全不同。本工具在执行位运算时,会显示完整的二进制补码表示。

GCD(Greatest Common Divisor,最大公约数)

两个或多个非零整数的所有公因数中最大的那个正整数。例如 GCD(12, 8) = 4,GCD(17, 13) = 1(互素)。GCD 的计算通常使用欧几里得算法(辗转相除法),其原理基于定理:GCD(a, b) = GCD(b, a mod b),通过不断取余缩小问题规模,直到余数为 0。GCD 在数论和密码学中有重要应用:分数化简需要计算分子分母的 GCD;RSA 密钥生成中计算欧拉函数需要 GCD;检测两个数是否互素(GCD 为 1)在算法设计中也很常见。本工具使用欧几里得算法高效计算 BigInt 的 GCD。

LCM(Least Common Multiple,最小公倍数)

两个或多个正整数的所有公倍数中最小的那个正整数。LCM 与 GCD 之间存在重要关系:LCM(a, b) = |a × b| / GCD(a, b)。本工具利用这一关系,先通过欧几里得算法计算 GCD,再通过公式推导 LCM,确保计算的高效性和正确性。LCM 在实际应用中同样广泛:分组问题(如求多个物品的最小公共周期)需要 LCM;分数的通分运算需要计算分母的 LCM;在日程安排和周期性事件的同步中也经常用到。支持任意大小的 BigInt 输入。

位运算(Bitwise Operation)

直接对整数的二进制位进行操作的运算。BigInt 支持六种位运算:按位与(AND,&)——两位都为 1 时结果为 1;按位或(OR,|)——至少一位为 1 时结果为 1;按位异或(XOR,^)——两位不同时结果为 1;按位取反(NOT,~)——0 变 1,1 变 0;左移(<<)——所有位向左移动指定位置,右侧补 0;有符号右移(>>)——所有位向右移动指定位置,左侧补符号位。由于 BigInt 使用无限位宽,这些运算的行为与 Number 类型有显著不同。

数量级(Order of Magnitude)

表示一个数字大致规模的量度,通常以 10 的幂次表示。数量级忽略了数字的具体数值,只关注其"大小级别"。例如 3 × 105 和 8 × 105 的数量级都是 105(十万级),而 3 × 105 和 3 × 108 的数量级差 3 个数量级。本工具在计算完成后会自动估计结果的数量级(使用科学记数法),帮助用户直观理解超大数字的规模。例如看到结果的数量级为 1077,就知道它接近可观测宇宙中的原子总数(约 1080)。这在密码学中评估密钥长度的安全性时特别有用。

梅森素数(Mersenne Prime)

形如 Mp = 2p - 1 的素数,其中指数 p 本身也必须是素数。以 17 世纪法国数学家马林·梅森(Marin Mersenne)的名字命名。并非所有 2p-1 都是素数(例如 211-1 = 2047 = 23 × 89 不是素数),但已知的梅森素数都是素数。截至 2024 年,已知的最大素数就是梅森素数。梅森素数与完全数有密切联系:如果 2p-1 是素数,那么 2p-1(2p-1) 就是一个完全数。本工具内置了 289-1(一个 27 位的梅森素数)的快捷填充,方便测试 BigInt 对大素数的运算能力。

欧几里得算法(Euclidean Algorithm)

计算两个整数最大公约数(GCD)的经典算法,以古希腊数学家欧几里得的名字命名。算法原理基于定理:GCD(a, b) = GCD(b, a mod b)。通过反复用较大数除以较小数并取余数,将问题规模逐步缩小,直到余数为 0,此时的除数就是 GCD。该算法的时间复杂度为 O(log(min(a, b))),即使对于非常大的 BigInt 数也能高效计算。本工具的 GCD 功能正是基于欧几里得算法实现,确保了计算效率。该算法也是许多密码学算法(如 RSA、扩展欧几里得算法求模逆元)的基础。