Golang 비트셋 구현하는 bitset 라이브러리 알아보기
오늘은 Golang으로 비트셋을 구현한 bitset 라이브러리를 알아보려 합니다.
bitset 설치
우선 Golang의 환경을 구성하기 위해 https://golang.org/dl/ 에서 윈도우, 리눅스, 맥에서 설치 프로그램을 내려받을 수 있습니다.
맥에서 brew로 쉽게 설치할 수 있습니다.
brew install go
우분투에서도 apt로 쉽게 설치할 수 있습니다.
sudo apt-get install golang-go
go get으로 bitset 패키지를 설치합니다.
go get github.com/willf/bitset
홈의 go 폴더에 bitset 소스코드와 패키지 파일이 생성됩니다.
예제
package main
해당 소스코드를 실행 파일로 인식하게 해주도록 main이라고 선언합니다.
import (
"fmt"
"math/rand"
"github.com/willf/bitset"
)
fmt, rand 그리고 bitset을 가져옵니다.
func main() {
var bs bitset.BitSet
BitSet 객체를 생성합니다.
num := uint(rand.Intn(50))
bs.Set(num)
fmt.Println(bs.String())
num번째 비트를 1로 설정하고 문자열로 출력합니다.
bs.Flip(num)
num번째 비트를 반전할 수 있습니다.
fmt.Print(bs.All())
fmt.Print("\n")
모두 비트가 설정되었거나 비어있으면 참으로 반환할 수 있습니다
fmt.Print(bs.Any())
fmt.Print("\n")
모든 비트 중에 하나라도 설정되어 있지 않으면 거짓이 반환됩니다.
fmt.Print(bs.None())
fmt.Print("\n")
모두 비트가 설정되어있지 않거나 비어있으면 참으로 반환할 수 있습니다
fmt.Print(bs.Len())
비트셋의 길이를 반환받을 수 있습니다.
bs.ClearAll()
fmt.Println(bs.String())
비트셋을 초기화하고 문자열로 출력해봅니다.
bs.Set(1).Set(2)
fmt.Println(bs.String())
체인으로 엮어서 특정 비트룰 1로 설정할 수도 있습니다.
for index, error := bs.NextSet(0); error; index, error = bs.NextSet(index + 1) {
fmt.Println(index)
}
다음 비트셋을 반환하는 iterator로 반복할 수 있습니다.
if bs.Intersection(bitset.New(100).Set(2)).Count() == 1 {
fmt.Println("BitSet equivalent of '&'")
}
}
and 연산자에 해당하는 집합으로 해당 값이 집합에 포함한다면 1을 반환하여 조건문에 사용할 수 있습니다.
Written on August 12, 2019