【问题标题】:How to create BigInteger of 256 bits with all bits set如何创建所有位设置的 256 位 BigInteger
【发布时间】:2018-02-26 17:16:18
【问题描述】:

如何创建一个全部设置为 256 位的 BigInteger?我已经尝试过以下方法:

BigInteger.valueOf(0xFFFFFFFFFFFFFFFFL)

但这并没有给我想要的结果:

int bitCount = b.bitCount();// 0
int bitLength = b.bitLength();// 0

我基本上需要的是一个包含 256 位的数字。

Tnx!

【问题讨论】:

  • 您是否尝试过使用Long.MAX_VALUE
  • @LuiggiMendoza 那将只有 63 个 1 位,而不是 256。

标签: java biginteger


【解决方案1】:

试试这个:

BigInteger.ONE.shiftLeft(256).subtract(BigInteger.ONE)

它首先计算 2^256,即二进制一个 1,后跟 256 个 0,然后减去一个,只剩下 256 个 1。

【讨论】:

  • 对于任何来到这里寻找 C# 答案的人(就像我一样),请使用 (BigInteger.One << 256) - 1
【解决方案2】:

具有 256 个 1 位的 BigInteger:

byte[] b = new byte[256 / 8 + 1]; // 256 bits + 1 byte
Arrays.fill(b, (byte) 0xFF);      // with all 1's
b[0] = 0; // except first 8 bits 0's, so value is positive
BigInteger bi = new BigInteger(b);
System.out.println(bi);
System.out.println("bitCount = " + bi.bitCount());
System.out.println("bitLength = " + bi.bitLength());

输出

115792089237316195423570985008687907853269984665640564039457584007913129639935
bitCount = 256
bitLength = 256

answer by @Henry 稍微麻烦一点,但可能更快,尽管这可能无关紧要。

【讨论】:

    猜你喜欢
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多