마스크 (컴퓨팅)
보이기
컴퓨터 과학에서 마스크(mask) 또는 비트마스크(bitmask)는 특히 비트 필드에서 비트 연산에 사용되는 데이터이다. 마스크를 사용하면 바이트, 니블, 워드 등의 다중 비트들을 싱글 비트 연산 작업에서 켜고 끄거나 상호 반전시킬 수 있다.
일반적인 비트마스크 기능
[편집]비트를 1
로 마스킹
[편집]특정 비트를 켜기 위해 code>Y OR 1 = 1과 Y OR 0 = Y
라는 원리에 따라 비트연산 OR
을 사용할 수 있다. 그러므로 비트를 켜기 위해 OR
에 1
를 사용할 수 있다. 비트를 변경하지 않은 채로 내버려 두려면 OR
에 0
을 사용하면 된다.
예: 더 높은 니블(비트 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;
}