如何创建所有位都设置为 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
比 麻烦一点,但可能更快,尽管这可能无关紧要。
如何创建一个 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
比