IT TIP

Java BitSet 예

itqueen 2020. 12. 27. 20:34
반응형

Java BitSet 예


BitSet0과 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

이것이 문제를 해결하는 데 도움이됩니까?


비트로 작업하려면 intJava 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 관련 링크입니다.

최신 정보:

문서에서는 다음과 같이 말합니다.

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

반응형