マスク(コンピューティング)

どのカードに印刷されているかから数字を推測するパーティ芸は、数字の2進表現のビットを使用します。 SVGファイルで、カードをクリックしてトグルする

関数への引数編集

Cなどのプログラミング言語では、ビットフィールドは関数に名前付きのブーリアン引数のセットを渡すのに便利な方法である。 例えば、グラフィックスAPIのOpenGLでは、画面や他のバッファをクリアするコマンドglClear()がある。 これは最大4つのバッファ(色、深度、蓄積、およびステンシルバッファ)をクリアできるので、APIの作者はこれに4つの引数を取らせることができました。 しかし、その場合、それへの呼び出しは

 glClear(1,1,0,0); // This is not how glClear actually works and would make for unstable code.

のようになり、これはあまり説明的ではありません。 代わりに、GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BITGL_ACCUM_BUFFER_BITGL_STENCIL_BUFFER_BIT という 4 つの定義されたフィールド ビットがあり、glClear()

 void glClear(GLbitfield bits);

として宣言され、関数への呼び出しは次のようになります

 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

内部ではこのようにビット フィールドを取る関数が個々のビットを抽出するのにバイナリ and が使用できます。 例えば、glClear()の実装は次のようになる。

void glClear(GLbitfield bits) { if ((bits & GL_COLOR_BUFFER_BIT) != 0) { // Clear color buffer. } if ((bits & GL_DEPTH_BUFFER_BIT) != 0) { // Clear depth buffer. } if ((bits & GL_ACCUM_BUFFER_BIT) != 0) { // Clear accumulation buffer. } if ((bits & GL_STENCIL_BUFFER_BIT) != 0) { // Clear stencil buffer. }}

この方法の利点は、関数引数のオーバーヘッドが減少することである。 最小のデータムサイズは1バイトなので、オプションを別々の引数に分けることは、引数あたり7ビットを浪費することになり、より多くのスタック空間を占有することになる。 その代わり、関数は通常1つ以上の32ビット整数を受け取り、それぞれに最大32個のオプションビットを持たせます。 エレガントではありますが、最も単純な実装では、この解決策はタイプセーフではありません。 GLbitfield は単純に unsigned int と定義されるので、コンパイラは glClear(42)glClear(GL_POINTS) への無意味な呼び出しを許してしまうのである。 C++ では、代替案として glClear が受け取ることのできる引数のセットをカプセル化するクラスを作成し、ライブラリにきれいにカプセル化することができます。

Inverse masksEdit

Masks are used with IP addresses in IP ACL (Access Control Lists) to specify what should be permitted and denied. IPアドレスをインタフェースで設定する場合,マスクは255から始まり,左側に大きな値を持ちます。たとえば,IPアドレス209.165.202.129は255.255.255.224というマスクとなります。 IP ACLのマスクはその逆で、例えば、マスク0.0.0.255です。 これは、逆マスクまたはワイルドカードマスクと呼ばれることもあります。 マスクの値を2進数(0と1)に分解すると、その結果、トラフィックを処理する際にどのアドレスビットを考慮するかが決まります。 0は、アドレスビットを考慮しなければならないこと(完全一致)を示し、マスクの1は「don’t care」であることを示します。 この表でさらに概念を説明します。

マスクの例:

ネットワークアドレス(処理するトラフィック) 10.1.1.0

mask0.0.0.255

ネットワークアドレス(バイナリ) 00001010.00000001.00000001.00000001.00000000

mask (binary)00000000.00000000.111111

バイナリマスクに基づいて、最初の3セット(オクテット)は与えられたバイナリネットワークアドレス(00001010.00000001.00000001)に正確に一致しなければならないことが分かります。 最後のセットは「don’t cares」(.11111111)で構成されています。 したがって、10.1.1.で始まるすべてのトラフィックは、最後のオクテットが「don’t care」であるため、マッチします。 7963>

255.255.255.255 から通常のマスクを引いて,ACL逆マスクを決定します。 この例では,ネットワークアドレス172.16.1.0の通常マスクが255.255.255.0なので,逆マスクを決定します。

255.255.255.255 – 255.255.255.0 (通常マスク) = 0.0.0.255(逆マスク)

ACL equivalent

0.0.0.0/255.255.255 の source/source-wildcard は “any” を意味します。

10.1.1.2/0.0.0.0 の source/wildcard は “host 10.1.1.2”

画像マスク編集

See also: ビットブリット、クリッピングパス
ラスターグラフィックススプライト(左)とマスク(右)

コンピュータグラフィックの世界で、ある画像を背景上に配置しようとしたとき、透明部分を二値マスクで指定することができる。 この方法では、意図された各画像に対して、実際には 2 つのビットマップがあります。実際の画像では、未使用領域はすべてのビットが 0 に設定されたピクセル値が与えられ、追加のマスクでは、対応する画像領域はすべてのビットが 0 に、周囲の領域はすべてのビットが 1 に設定されたピクセル値が与えられています。

実行時に、画像を背景の上に置くために、プログラムは最初にビット単位の AND 演算を使用して、目的の座標で画像マスクと画面画素のビットをマスクします。 これは、透明な領域の背景ピクセルを保持する一方で、オーバーラップしたイメージによって見えなくなるピクセルのビットをゼロでリセットします。

次に、プログラムは、ビット単位の OR 演算を使って背景ピクセルのビットと結合することにより、イメージ ピクセルのビットを描画します。 こうすることで、画像の画素は適切に配置され、背景の周囲の画素は維持される。 7963>

この技術は、ポインティングデバイスのカーソルのペイント、典型的な2Dビデオゲームのキャラクターや弾丸など(スプライト)、GUIアイコン、ビデオのタイトル付けやその他の画像混合アプリケーションに使用されています。

関連するが(同じ目的で使われるため)、透明色とアルファチャンネルは、2値マスキングによる画像画素混合を伴わない技術である。 関数の出力からインデックスを作成するために、モジュロは配列のサイズに一致するようにドメインのサイズを減らすために取ることができます。しかし、多くのプロセッサでは、ハッシュテーブルのサイズを2のサイズの累乗に制限し、代わりにビットマスクを使用することがしばしば高速になります。