如何创建所有位均置1的256位BigInteger
嘿,我来帮你搞定这个256位全1的BigInteger问题!其实有几种简单可靠的实现方式,不同编程语言的处理思路大同小异,我给你列几个主流场景的方案:
Java 实现
- 移位减法(推荐):利用移位生成最高位为1、其余为0的数,再减1就会把后面所有位翻转为1。注意这里要左移256位,得到的是257位的数,减1后正好是256位全1:
BigInteger allOnes = BigInteger.ONE.shiftLeft(256).subtract(BigInteger.ONE);
- 十六进制字符串构造:256位全1对应的十六进制是64个连续的
f,直接解析这个字符串就行:
BigInteger allOnes = new BigInteger("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", 16);
C# 实现
C# 的BigInteger在System.Numerics命名空间下,两种思路同样适用:
- 移位减法:
using System.Numerics; // 一行搞定 BigInteger allOnes = (BigInteger.One << 256) - BigInteger.One;
- 十六进制字符串解析:
BigInteger allOnes = BigInteger.Parse("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", System.Globalization.NumberStyles.HexNumber);
Python 实现
Python 的 int 天然支持任意精度,实现起来更简洁:
- 移位减法:
all_ones = (1 << 256) - 1
- 直接十六进制赋值:
all_ones = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
验证小技巧
你可以用语言自带的方法验证结果是否正确:
- Java/C#:调用
allOnes.bitLength(),返回值应该是256 - Python:调用
all_ones.bit_length(),同样返回256
之前没得到预期结果大概率是移位位数搞错了(比如误移255位,就只能得到255个1),或者十六进制字符串少写了f,试试上面的方法应该就能解决啦!
内容的提问来源于stack exchange,提问作者Michael90
相关产品推荐
相关产品推荐

