Java BitSet 예
BitSet
0과 1로 작업 할 수있는 좋은 Java 예제를 찾고 있습니다. 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);
이렇게하면 bits2
비어있는 것으로 반환 되는 이유는 무엇입니까?
언급 한 특정 문제에 bits2.set(1000001)
대해을 ( 를) 호출 할 때 1 백만 번째와 첫 번째 비트를 true로 설정했습니다. 그런 다음 bits1
백만, 11 만 1 천 및 111 번째 비트 세트가있는와 교차 할 때 공통 비트가 없습니다.
당신이 하려는 것은
bits2.set(0); // set the 0th bit
bits2.set(6); // set the 6th bit
이것이 문제를 해결하는 데 도움이됩니까?
비트로 작업하려면 int
Java 7에서 값을 사용할 수 있습니다 .
int bits2 = 0b1000001;
int bits1 = 0b1111111;
bits2 &= bits1;
System.out.println(Integer.toBinaryString(bits2));
인쇄물
1000001
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);
}
}
다음은 도움이되는 bitSet 관련 링크입니다.
- http://www.java-samples.com/showtutorial.php?tutorialid=378
- http://www.codeguru.com/java/tij/tij0090.shtml
- http://imagenious.wordpress.com/2008/02/05/java-bitset-vs-primitive/
최신 정보:
문서에서는 다음과 같이 말합니다.
public void set (int bitIndex)
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;
}
문자열 입력 "1001"의 경우
BitSet s1 = createFromString("1001");
System.out.println(s1);
출력 :
{0, 3}
이 시도:
import java.util.BitSet;
public class BitSetExample {
public static void main(String args[]){
BitSet bits1 = new BitSet(7);
BitSet bits2 = new BitSet(7);
// set some bits
for(int i = 0; i < 7; i++) {
if((i % 2) == 0) bits1.set(i);
if((i % 3) != 0) bits2.set(i);
}
System.out.println("BitSet1: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits1.get(i)? "1 ": "0 ");
}
System.out.println("\nBitSet2: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits2.get(i)? "1 ": "0 ");
}
System.out.println();
//And
bits1.and(bits2);
System.out.println("b1 = b1 AND b2\nBitSet1: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits1.get(i)? "1 ": "0 ");
}
System.out.println();
System.out.println("BitSet2: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits2.get(i)? "1 ": "0 ");
}
System.out.println();
//Or
bits1.or(bits2);
System.out.println("b1 = b1 OR b2\nBitSet1: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits1.get(i)? "1 ": "0 ");
}
System.out.println();
System.out.println("BitSet2: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits2.get(i)? "1 ": "0 ");
}
System.out.println();
//Xor
bits1.xor(bits2);
System.out.println("b1 = b1 XOR b2\nBitSet1: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits1.get(i)? "1 ": "0 ");
}
System.out.println();
System.out.println("BitSet2: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits2.get(i)? "1 ": "0 ");
}
System.out.println();
//Setting bits to zero and one
bits1.set(1);
bits2.set(1,false);
System.out.println("set bit 1 of BitSet1 to one and set bit 1 of BitSet2 to zero\nBitSet1: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits1.get(i)? "1 ": "0 ");
}
System.out.println();
System.out.println("BitSet2: ");
for(int i = 0; i < 7; i++) {
System.out.print(bits2.get(i)? "1 ": "0 ");
}
System.out.println();
}
}
도움이 되었기를 바랍니다. 자세한 내용은 https://github.com/m-vahidalizadeh/foundations/blob/master/src/data_structures/BitSetExample.java 를 방문 하십시오 .
참조 URL : https://stackoverflow.com/questions/9333681/java-bitset-example
'IT TIP' 카테고리의 다른 글
for-in 문 (0) | 2020.12.27 |
---|---|
sprintf를 사용하여 문자열을 추가하는 방법은 무엇입니까? (0) | 2020.12.27 |
iOS 8에서 UIImagePickerController가 표시되지 않음 (0) | 2020.12.27 |
Android에서 이미지를 투명하게 만들려면 어떻게해야합니까? (0) | 2020.12.27 |
자바 스크립트 비밀번호 생성기 (0) | 2020.12.27 |