Java 操纵二次幂的有效方法

Java 操纵二次幂的有效方法,java,math,bit-shift,largenumber,Java,Math,Bit Shift,Largenumber,对二的幂进行编码的最有效方法是整数的位移位 1你需要对你的“二次幂”执行什么操作?例如,如果它只是除法和乘法,你可以只保留所讨论的二次幂的log2,然后对它们使用减法和加法。如果不知道你想要什么样的“操纵”,就不可能就如何有效地“操纵”给出好的建议 简单:long:-) 如果您不介意浮点运算,double可以精确地表示2到2^1023的所有幂 否则,这取决于你在做什么样的“操纵”。这就是你需要的吗 BigInteger hugeNumber = BigInteger.ONE.shiftLeft(

对二的幂进行编码的最有效方法是整数的位移位


1你需要对你的“二次幂”执行什么操作?例如,如果它只是除法和乘法,你可以只保留所讨论的二次幂的
log2
,然后对它们使用减法和加法。如果不知道你想要什么样的“操纵”,就不可能就如何有效地“操纵”给出好的建议

简单:
long
:-)

如果您不介意浮点运算,
double
可以精确地表示2到2^1023的所有幂

否则,这取决于你在做什么样的“操纵”。

这就是你需要的吗

BigInteger hugeNumber = BigInteger.ONE.shiftLeft(n);
这是n=1000时的结果

10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
看起来这就是你需要的


它有
mod
shiftLeft
shiftRight
,当然还有
add
。它是一个不可变的类型(ala
String
),因此它可能不是最有效的处理方式,但除非您已经证明它是一个性能问题,否则我不会担心它。

它需要准确吗

否则,可以表示为long乘以2乘以int的幂

例如:


x=15*2^123

很抱歉,我没有考虑这个问题,我需要执行加法、减法、乘法、除法和modulus@bguiz,然后您需要BigInteger,如其他答案所述。@bguiz如果您需要执行加法等操作,那么您实际上不是在使用二的幂。你只需要一个用于处理大数字的库。所以我想知道为什么你一开始不要求它。@user207442:因为我想要处理大数字并进行位移位的东西(二的幂)@ZZ编码器的答案符合要求。@dan04:我想避免浮点运算,而且“long”不够大。我会更新这个问题,让它更清楚。