길이가 다른 비트 필드를 or 연산하고자 할 때
글쓴이: linuxgeek / 작성시간: 일, 2009/09/13 - 4:39오전
수백에서 수천개의 플래그를 담을 데이터 구조를 생각하다 일종의 String형을 비트 필드로 쓰기로 했습니다.
예를 들어 10000개의 플래그 엔트리를 가지는 비트 필드를 사용하기 위해 1250바이트짜리 문자열형을 사용한 것입니다.
비트는 가장 왼쪽부터 사용합니다.
질문은 이렇게 구성된 다른 크기의 비트 필드(사실은 String형)들을 AND나 OR과 같은 논리연산을 어떻게 가장 효율적으로 할 수 있는가 하는 것입니다.
예를 들어 아래 C와 같은 값을 얻고자 합니다.
String A: 11001100 00111111 01010101 11110000
String B: 10010011 11111111 00000000 10000000 00001000 00010101 10000000
---OR-------------------------------------------------------------------
String C: 11011111 11111111 01010101 11110000 00001000 00010101 10000000
쉬운 가르침 부탁 드리겠습니다.
아울러 이 문제와 연관된 다음 문제도 좀 봐 주시면 감사 드리겠습니다.
Forums:
음...
비트 필드 대응이라고는 하나, 저렇게 큰 길이를 접근하려면, shift 오버헤드가 만만치 않을 것 같네요.
그냥 char 배열로 잡고, 값으로 사용하는게 낫지 않을까요?
그러면 그 다음 문제도 별로 고민할 필요가 없을 것 같은데요..
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』
말씀하신용도의
말씀하신용도의 자료구조를 BitVector라고 합니다.
And/Or/Not 연산시 비트단위가 아니라, 바이트 혹은 워드 단위로 계산시 성능이 매우 좋기 때문에 자주 사용하지요.
Count() 알고리즘은 바이트단위로 계산시 경우의 수가 256이므로 이를 미리 메모리에 테이블로 만들서 계산하는 방법을 많이 사용합니다. 자세한 사항은 Google에서 검색하여 자료를 찾아보시는것이 좋겠네요 :-)
댓글 달기