마스크 (컴퓨팅)

컴퓨터 과학에서 마스크(mask) 또는 비트마스크(bitmask)는 특히 비트 필드에서 비트 연산에 사용되는 데이터이다. 마스크를 사용하면 바이트, 니블, 워드 등의 다중 비트들을 싱글 비트 연산 작업에서 켜고 끄거나 상호 반전시킬 수 있다.

일반적인 비트마스크 기능

편집

비트를 1로 마스킹

편집

특정 비트를 켜기 위해 code>Y OR 1 = 1과 Y OR 0 = Y라는 원리에 따라 비트연산 OR을 사용할 수 있다. 그러므로 비트를 켜기 위해 OR1를 사용할 수 있다. 비트를 변경하지 않은 채로 내버려 두려면 OR0을 사용하면 된다.

예: 더 높은 니블(비트 4, 5, 6, 7)을 "on"으로 마스킹. 더 낮은 니블(비트 0, 1, 2, 3)은 변경되지 않음.

    10010101   10100101
 OR 11110000   11110000
  = 11110101   11110101

비트를 0으로 마스킹

편집

실제로는 "on" 마스킹(1로 마스킹)보다 "off" 마스킹(0으로 마스킹)을 하는 일이 더 많다. 비트가 0과 함께 AND처리될 때 결과는 무조건 0이다. (예: Y AND 0 = 0) 원래 있던 것처럼 다른 비트들을 남겨두려면 Y AND 1 = Y가 되므로 1과 함께 AND 처리할 수 있다.

예: 더 높은 니블(비트 4, 5, 6, 7)을 "off"로 마스킹. 더 낮은 니블(비트 0, 1, 2, 3)은 변경되지 않음.

    10100101   10100101
AND 00001111   00001111
  = 00000101   00000101

해시 테이블

편집

C에서 modulo와 masking의 예:

#include <stdint.h>
#include <string.h>

int main(void) {
    const uint32_t NUM_BUCKETS = 0xFFFFFFFF;  // 2^32
    const uint32_t MAX_RECORDS = 1<<10;  // 2^10
    const uint32_t HASH_BITMASK = 0x3FF;  // (2^10)-1

    char **token_array = NULL;
    // Handle memory allocation for token_array…

    char token[] = "some hashable value";
    uint32_t hashed_token = hash_function(token, strlen(token), NUM_BUCKETS);

    // Using modulo
    size_t index = hashed_token % MAX_RECORDS;

    // OR

    // Using bitmask
    size_t index = hashed_token & HASH_BITMASK;

    *(token_array+index) = token;

    // Free the memory from token_array …
    return 0;
}

같이 보기

편집

외부 링크

편집