"비트 마스크"가 왜 이렇게 호출됩니까?
나는 주로 비트 연산에 사용되며 비트 마스크 사용은 별도의 변수 사용보다 효율적이라는 것을 알고 있습니다.
그러나 내 질문은 비트 마스크가 발명 된 이유와시기입니다. 초기 컴퓨팅 이후에 사용 되었습니까? IT 도메인의 비트 마스크 외에 다른 유형의 "마스크"가 있습니까?
"비트 마스크"가 왜 이렇게 호출됩니까?
나는 주로 비트 연산에 사용되며 비트 마스크 사용은 별도의 변수 사용보다 효율적이라는 것을 알고 있습니다.
그러나 내 질문은 비트 마스크가 발명 된 이유와시기입니다. 초기 컴퓨팅 이후에 사용 되었습니까? IT 도메인의 비트 마스크 외에 다른 유형의 "마스크"가 있습니까?
답변:
(다양한 얼굴의) 마스크는 얼굴의 일부를 덮고 다른 부분이 보이도록하는 것입니다. 이 용어는 컴퓨팅에서 유추에 의해 사용됩니다. 비트 마스크는 비트 세트의 일부 비트를 커버 (필터링)하고 다른 비트는 통과시킵니다.
IT 도메인의 비트 마스크 외에 다른 유형의 "마스크"가 있습니까?
내 머리 꼭대기에서 마스크는 이미지 처리에 자주 사용됩니다. 비슷한 개념입니다. 마스크 할 대상과 통과 할 대상의 모양을 보여주는 흑백 이미지를 만듭니다.
비트 마스크는 비트 필드의 일부 비트를 마스킹하고 다른 비트는 노출시키는 데 사용됩니다.
initial value: 011011001
bit mask.....: 111110000
result value.: 011010000
논리 게이트 (AND, OR ...) 또는 트랜지스터가있는 전자 장치 또는 릴레이가있는 전기 기계에서 계산하기 전에 사용되었습니다.
비트 마스크는 너무 오래되었습니다. 나는 첫 번째 참조를 찾을 수 없었지만 8 비트 프로세서의 출현으로 확실히 인기가 있었고 4 비트 프로세서에서도 사용되었을 가능성이 있습니다.
비트 마스크의 기본 개념은 비트 병렬 처리를 이용하는 것입니다. 8 비트 컴퓨터는 단일 기본 단어 (레지스터에 적합 함)로 묶여 있으면 한 번에 8 비트와 동일한 비트 연산을 수행 할 수 있습니다.
이름은 마스킹에서 비롯된 것으로, 상호 작용하지 않으려는 영역을 덮는 일반적인 방법입니다. 예를 들어, 벽의 영역을 가리기 위해이 스텐실을 고려하십시오 (스텐실은 패턴을 표시하기 위해 페인팅 후에 이동했습니다)
마스크는 사진에 사용되며, 여기서 "스텐실"이 아니라 "닷지"라는 용어로 사용됩니다. 인쇄하는 동안 마스크를 사용하여 빛의 일부를 가려서 영역을 밝게 할 수 있습니다.
이 용어는 직접 회로를 만드는 데 사용되는 기술인 포토 리소그래피에도 직접 사용됩니다. 이 마스크는 칩에 그려진 포토 레지스트에 빛이 도달하는 것을 방지하여 나중에 칩의 매혹적인 패턴으로 이어지는 패턴을 만듭니다. (아래 이미지는 궁금한 경우 인텔 8080A 프로세서 의 마스크 중 하나입니다 )
마찬가지로 비트 마스킹에서는 작업하려는 단어 부분을 선택하여 나머지 비트를 모두 마스킹합니다. 아래 예제에서는 "and"연산을 사용하여 3 번째, 4 번째 및 8 번째 비트 만 표시되도록 입력을 마스크합니다. 나머지는 "마스크"되어 0이됩니다. 내가 사용하는 마스크는 00110001
입니다. 비트 마스크의 시각적 모양이 위의 실제 마스크의 모양과 비슷하게 보이기 때문에 아래에 #
0을 .
표시하고 1을 나타내는 것으로 표시하고 마스크되지 않은 출력의 비트를 표시하는 "선택된 비트"행을 표시합니다 ( "선택된 비트"는 실제로 발생하는 논리 연산이 아닙니다. 프로세서는 실제로 한 단계에서 입력 및 마스크에서 출력으로 바로 이동하지만 시각적 이미지를 명확하게합니다.)
Input 10010111
Mask ##..###. (aka 00110001)
-----------------------
(selected) 01 1
Input AND Mask 00010001
앞서 언급했듯이 비트 마스킹은 프로세서의 생산성을 크게 향상시키기 때문에 매우 오래되었습니다. 4 비트 프로세서에서는 프로세서를 4 배 더 빠르게 만들 수 있습니다. 8 비트 프로세스에서 또는 8 배 더 빨라질 수 있습니다 (물론 비트 단위 연산에서만).
이를위한 매력적인 용도 중 하나는 체스 엔진입니다. 체스 판에는 64 개의 사각형이 있습니다. 최신 엔진에는 64 비트 정수가 있습니다. 이것은 매우 편리한 행운이므로 체스 엔진은 종종 그것을 활용합니다. 그들은 조각의 위치를 포함하는 소위 " 비트 보드 "를 가지고 있습니다. 이를 통해 한 번에 모든 폰 움직임을 찾는 등 모든 종류의 최적화를 수행 할 수 있습니다.
영어에서 가장 일반적으로 사용되는 마스크는 무언가를 숨기는 장치입니다. 다른 답변에서 스크린 인쇄가 언급됩니다. 페인트 테이프는 페인트 칠 등을 피하기 위해 무언가를 '마스크 오프'합니다. PC 보드의 솔더 마스크는 솔더링되지 않을 영역에서 솔더링 할 영역을 '마스크'합니다.
"비트 마스킹"의 경우, 일부 비트는 '숨겨 지거나'무시되므로 더 관심있는 다른 비트는 더 쉽게 조작하거나 볼 수 있습니다.
비트 마스킹은 단순히 '구식'기술이 아니라 가장 오래된 프로세서에서 아는 한 모든 기계 명령어가 아닌 대부분의 기본 작업입니다. 일반적으로 이것은 "이 레지스터의 비트 패턴을 사용하여 다른 레지스터의 비트를 마스킹하는"형식입니다.
비트 마스크 는 두 가지 이유로 발명되었습니다.
비트를 켤 때 OR 또는 비트를 끄는 AND의 비트 패턴이 어떻게 보이는지 보면 마스크처럼 보입니다.
비트 마스크를 기반으로하는 가장 일반적인 마스크는 이미지 마스크입니다 (처음에 포함 된 링크 참조).
bool
각 플래그를 별도의 바이트 로 배열 하는 다른 방법이나 다른 방법 보다 플래그 집합을 전달하는 데 적합하고 효율적인 방법 입니다. 따라서 if (x & (FLAG_A | FLAG_B))
대신 대신 같은 작업을 수행 할 수 있습니다 if (xflags[FLAG_A] || xflags[FLAG_B])
. 특히 마스크가 일정하지 않은 경우; 마스크를 정수로 전달할 수 있으면 검사 할 플래그 목록을 전달하는 것보다 훨씬 저렴합니다. 따라서 메모리와 캐시가 무제한이더라도 비트 세트와 마스크를 사용하는 것이 훨씬 더 효율적일 수 있습니다.