我正在寻找一个好的Java BitSet示例来使用0和1.我试着查看Javadocs,但是我只是通过阅读来了解该类的用法.例如,会如何and,or以及xor方法在两个不同的工作BitSet对象?
例如:
BitSet bits1 = new BitSet();
BitSet bits2 = new BitSet();
bits2.set(1000001);
bits1.set(1111111);
bits2.and(bits1);
System.out.println(bits2);
Run Code Online (Sandbox Code Playgroud)
如果我这样做,它返回bits2为空为什么是这样?
Lou*_*man 105
对于您提到的具体问题:当您调用时bits2.set(1000001),将百万分之一和第一位设置为true.然后,当你与bits1一百万,一亿一千一百一十一和第一百一十二位设置相交时,它们没有共同点.
我想你的意思是
bits2.set(0); // set the 0th bit
bits2.set(6); // set the 6th bit
Run Code Online (Sandbox Code Playgroud)
这有助于澄清问题吗?
Pet*_*rey 57
如果要使用位,可以使用intJava 7中的值.
int bits2 = 0b1000001;
int bits1 = 0b1111111;
bits2 &= bits1;
System.out.println(Integer.toBinaryString(bits2));
Run Code Online (Sandbox Code Playgroud)
版画
1000001
Run Code Online (Sandbox Code Playgroud)
Fau*_*aux 45
BitSet没有方便的方法来接受像那样的字符串.我在下面提供了一些,现在这个例子可以按照您的预期运行.请注意,这使用Java 7中的新功能; 如果您想使用Java 6,很容易在线找到这些方法的实现.
import java.util.BitSet;
class Scratch {
public static void main(String[] args) {
BitSet bits1 = fromString("1000001");
BitSet bits2 = fromString("1111111");
System.out.println(toString(bits1)); // prints 1000001
System.out.println(toString(bits2)); // prints 1111111
bits2.and(bits1);
System.out.println(toString(bits2)); // prints 1000001
}
private static BitSet fromString(final String s) {
return BitSet.valueOf(new long[] { Long.parseLong(s, 2) });
}
private static String toString(BitSet bs) {
return Long.toString(bs.toLongArray()[0], 2);
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一些关于bitSet的链接可以帮助你:
更新:
在文档中,有人说:
public void set(int bitIndex)
Run Code Online (Sandbox Code Playgroud)Sets the bit at the specified index to true.
所以当你打电话时bits2.set(10);,它被认为是10十进制而不是1 0所以你得到的是以下数字1000000000.
要正确设置,在本例中,我想将第2位设置为1,因此我调用bits2.set(1);因为索引从0开始.
总之,对于设置为1的每个位,您需要调用bitSet.Set并为其提供位的索引.
我正在分享我使用位串作为输入创建BitSet对象的实现.
private static BitSet createFromString(String s) {
BitSet t = new BitSet(s.length());
int lastBitIndex = s.length() - 1;
for (int i = lastBitIndex; i >= 0; i--) {
if ( s.charAt(i) == '1'){
t.set(lastBitIndex - i);
}
}
return t;
}
Run Code Online (Sandbox Code Playgroud)
对于字符串输入"1001"
BitSet s1 = createFromString("1001");
System.out.println(s1);
Run Code Online (Sandbox Code Playgroud)
输出:
{0, 3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
89079 次 |
| 最近记录: |