今回はビット処理の論理積(AND)ついて説明します。論理積であるANDの動作はXORと比べると簡単です。2つのビットが1なら1、それ以外なら0になります。
0 と 0 → 0
0 と 1 → 0
1 と 0 → 0
1 と 1 → 1
論理「積」という文字のとおり、ビット同士の掛け算です。1と1以外を掛け算すれば0になります。この性質を利用すると、特定のビットを0にすることができます。
簡単なところで数値を偶数にしてみましょう。IchigoJamの場合は16bitなので以下のように`1111111111111110になります。16進数なら#FFFEになります(ちなみにJavaScriptなど多くの言語では32bitで処理が行われますので、#FFFFFFFEとのANDをとります)。
10 INPUT A
20 A=A & #FFFE
30 PRINT A
40 GOTO 10
RUN
?3
2
?10
10
?111
110
ANDは特定のビットを保護したりすることができます。これはビットマスクとも呼ばれます。ANDを利用すると、値を特定の範囲に収めることができます。
例えば数値を0〜7の範囲になるようにしてみましょう。これは下位3ビットを保護します。つまり`111です(`はIchigoJamでの2進数表現です。古い時代では&B111という表記もありました)。10進数/16進数なら7になります。
10 INPUT A
20 A=A & 7
30 PRINT A
40 GOTO 10
RUN
?1
1
?5
5
?7
7
?8
0
?9
1
この場合、数値は
0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
↓
0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7,0,1
のようになります。ANDを使えば値を一定範囲でループさせることができます。ただ、今ではこのような値を一定範囲に収める場合は、ANDでなく剰余(割り算の余り)が使われます。というのもANDの場合、ビット処理なので任意の数値範囲に収めることが難しいからです。
ちなみに昔多く利用されていた8ビットCPUには、掛け算を行ったり、割り算、割り算の余りを求める命令がありませんでした。こうなると割り算の余りを求めるにしても、自分でプログラムを作らなければいけません。それなら、ANDで処理できるようにプログラムした方がよかったというところです。
PhotoshopでANDのビットマスク機能を使ってみましょう。とは言ってもPhotoshopには明確にANDとは書かれていません。ANDは掛け算=「積」です。掛け算は「乗算」とも言います。そう、レイヤーの合成モードの「乗算」がそうです。
ビット処理のANDは0と1ですが、これを0〜255までの範囲に広げると透明度情報である「αチャンネル」になります。
実際にPhotoshopでテストしてみましょう。まず、何か写真などを開きます。その上に新しくレイヤーを作成します。レイヤー全体を真っ黒に塗りつぶします。この状態でレイヤーモードを「乗算」にします。
結果は真っ黒な表示です。ここで白色を選択します。ブラシか鉛筆ツールで黒く塗りつぶしたレイヤーに、文字か何かを描きます。すると、下にある写真が表示されるはずです。
白色はビットにすると#FFFFFF(8bitの場合)、つまり全ビットが1です。1との乗算(AND)なので下の画像の色は全部透過します。
それでは次に赤色(完全な赤色、つまりR=255,G=0,B=0)を選択します。レイヤーにブラシで描くと、下の写真で赤色以外はマスクされ色がなくなります。赤色のセロファンで写真を見たような感じになります。青色や緑色で試してみてもよいでしょう。
Photoshopのモードは多々ありますが、その裏側ではどのような処理が行われているのかを知っておけば、応用範囲も広がるはずです。
次回は論理和(OR)について説明します。
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
長野県で放送されている「フランダースの犬」。今見ると、また違った意味で見ることができてなかなか面白い、というか、なるほどと思うところがあります。上と下をつなぐ中間管理職によって、事実がゆがめられて伝達されていく様は、どこでも見られる光景。これじゃあ上も下も報われない……。
名作と言われるだけあって、今見てもいいアニメ(経験を重ねた後で見た方がよいのかも、という気はする)。
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/
・JavaScriptによるデータビジュアライゼーション入門
http://www.amazon.co.jp/dp/4873117461/
・Photoshop自動化基本編
http://www.amazon.co.jp/dp/B00W952JQW/
・Illustrator自動化基本編
http://www.amazon.co.jp/dp/B00R5MZ1PA/
・Adobe JavaScriptリファレンス
http://www.amazon.co.jp/dp/B00FZEK6J6/
・4K/ハイビジョン映像素材集
http://www.openspc2.org/HDTV/
・クリエイター手抜きプロジェクト
http://www.openspc2.org/projectX/