我想创建一个x位二进制数并指定最左边的位数。
I.e要创建一个8位数,其中最左边的6位全部设置为1111 1100
类似于创建16位数字,其中8位左位全部设置为1111 1111 0000 0000
需要能够为大数(128位)执行此操作。是否有使用核心库的现有方法?
谢谢
答案 0 :(得分:1)
考虑使用BitSet
,如下所示:
import java.util.BitSet;
/**
* Creates a new BitSet of the specified length
* with the {@code len} leftmost bits set to {@code true}.
*
* @param totalBits The length of the resulting {@link BitSet}.
* @param len The amount of leftmost bits to set.
* @throws IllegalArgumentException If {@code len > totalBits} or if any of the arguments is negative
*/
public static BitSet leftmostBits(int totalBits, int len)
{
if (len > totalBits)
throw new IllegalArgumentException("len must be smaller or equal to totalBits");
if (len < 0 || totalBits < 0)
throw new IllegalArgumentException("len and totalBits must both be positive");
BitSet bitSet = new BitSet(totalBits);
bitSet.set(0, len);
return bitSet;
}
然后,您可以使用BitSet
使用其公共API(此处显示Java 8):
BitSet
专为此设计(精确位操作),它也为您提供了任意长度(不限制为64位,例如long
)。< / p>
答案 1 :(得分:0)
您可以使用两个循环。一个用于所有1和另一个用于所有0。
或者使用Java 8,你可以做到
InStream.range(0, ones).forEach(i -> System.out.print(1));
InStream.range(ones, bits).forEach(i -> System.out.print(0));