마스크 (컴퓨팅)

(비트마스킹에서 넘어옴)

컴퓨터 과학에서 마스크(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;
}

같이 보기 편집

외부 링크 편집