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
,乘
,减
和除
。它是一个不可变的类型(alaString
),因此它可能不是最有效的处理方式,但除非您已经证明它是一个性能问题,否则我不会担心它。它需要准确吗
否则,可以表示为long乘以2乘以int的幂
例如:
x=15*2^123很抱歉,我没有考虑这个问题,我需要执行加法、减法、乘法、除法和modulus@bguiz,然后您需要BigInteger,如其他答案所述。@bguiz如果您需要执行加法等操作,那么您实际上不是在使用二的幂。你只需要一个用于处理大数字的库。所以我想知道为什么你一开始不要求它。@user207442:因为我想要处理大数字并进行位移位的东西(二的幂)@ZZ编码器的答案符合要求。@dan04:我想避免浮点运算,而且“long”不够大。我会更新这个问题,让它更清楚。