如何创建最左边位数设置的x位二进制数

时间:2016-01-11 19:09:46

标签: java binary bits

我想创建一个x位二进制数并指定最左边的位数。

I.e要创建一个8位数,其中最左边的6位全部设置为1111 1100

类似于创建16位数字,其中8位左位全部设置为1111 1111 0000 0000

需要能够为大数(128位)执行此操作。是否有使用核心库的现有方法?

谢谢

2 个答案:

答案 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;
}

Here are some unit tests

然后,您可以使用BitSet使用其公共API(此处显示Java 8):

BitSet public API as of 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));