java 最大二进制数,如何在Java中将非常大的十进制数转换为二进制数

尝试这个:

new BigDecimal("12345678901234567890123456789012345678901234567890").toString(2);

编辑:

原则上,不同数量系统之间的转换是重复的“除法,余数,乘法,加法”运算.我们来看一个例子:

我们想将123从十进制转换为基数为3的数字.我们做什么?

>取余数模3 – 将这个数字加到结果前面.

>除以3.

>如果数字大于0,请在步骤1继续该数字

所以它看起来像这样:

> 123%3 == 0. ==>最后一位是0.

> 123/3 == 41.

> 41%3 == 2 ==>第二个数字是2.

> 41/3 == 13

> 13%3 == 1 ==>第三个数字是1.

> 13/3 == 4

> 4%3 == 1 ==>第四位数字再次为1.

> 4/3 == 1

> 1%3 == 1 ==>第五位是1.

所以,我们有11120作为结果.

问题是,为此您需要以十进制格式进行某种除法,如果您没有以基于十进制的格式实现数字,通常情况并非如此(就像我在答案中所做的那样)上面提到的最后一个问题)

但它适用于从内部数字格式转换为任何外部格式.

那么,让我们看看我们如何进行逆向计算,从11120(基数3)到其十进制等值. (Base 3在这里是任意基数的占位符,Base 10是内部基数的占位符.)原则上,这个数字可以写成:

1 * 3^4 + 1 * 3^3 + 1*3^2 + 2*3^1 + 0*3^0

一个更好的方法(更快地计算)是这样的:

((((1 * 3) + 1 )*3 + 1 )*3 + 2)*3 + 0

1

3

4

12

13

39

41

123

123

(这被称为Horner方案,通常用于计算多项式的值.)

如果您知道如何在目标系统中表示输入基数(和数字),则可以在要实现的数字方案中实现此目的.

(I just added对我的DecimalBigInt类进行了这样的计算,但您可能希望直接在内部数据结构中进行计算,而不是为每个要输入的十进制数字创建BigNumber类的新对象(甚至两个).)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值