如何创建所有位都设置为 256 位的 BigInteger

How to create BigInteger of 256 bits with all bits set

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

BigInteger.valueOf(0xFFFFFFFFFFFFFFFFL)

但它没有给我想要的结果:

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

我基本上需要的是一个包含256位的数字,这些都已设置好。

谢谢!

试试这个:

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

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

具有 256 个 1 位的大整数:

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

麻烦一点,但可能更快,尽管这可能无关紧要。