今回はビット処理の論理和(OR)ついて説明します。論理和であるORの動作は、片方のビットが1なら1になります。つまり、0になるのは2つのビットが0の場合だけです。
0 と 0 → 0
0 と 1 → 1
1 と 0 → 1
1 と 1 → 1
論理「和」という文字のとおりビット同士の足し算です。0と0以外を足せば必ず1になります。
足し算と言っても計算した結果、桁があがることはありません。1+1=10になることはなく、1+1=1にしかなりません。なので通常の足し算(和)ではなく論理「和」なのです。
この性質を利用すると、特定のビットを1にすることができます(ビットを立てる、という言い方をする場合もあります)。
0 と 0 → 0
0 と 1 → 1
1 と 0 → 1
1 と 1 → 1
論理「和」という文字のとおりビット同士の足し算です。0と0以外を足せば必ず1になります。
足し算と言っても計算した結果、桁があがることはありません。1+1=10になることはなく、1+1=1にしかなりません。なので通常の足し算(和)ではなく論理「和」なのです。
この性質を利用すると、特定のビットを1にすることができます(ビットを立てる、という言い方をする場合もあります)。
簡単なところで、数値を機数にしてみましょう。ANDは偶数にすることができましたが、ORなら奇数にすることができます。
奇数にするには1との論理和をとるだけです。
10 INPUT A
20 A=A | 1
30 PRINT A
40 GOTO 10
RUN
?0
1
?3
3
?4
5
?11
11
ORの利用例としては、画像などのデータを合成する処理があります。
IchigoJamなら、文字と文字を合成することができます。実際にやってみましょう。
IchigoJamでは、#E0番以降の文字の形状を自由に作成・定義することができます。#E0版以降の文字データは#700番地以降に入っています。#700番以降のメモリを書き換えると文字の形状も変わります。
?CHR$(#E0)
OK
左向きの矢印が表示されたら、以下のように入力します。POKEは指定したメモリの番地(アドレス)に指定した値を書き込みます。
`11111111は16進数では#FFです。
POKE #700,`11111111
実行すると、左向きの矢印の一番上に白い横線が追加されます。次に、以下のように入力してください。
POKE #700,`00000000
今度は一番上の白い横線が消えます。次に、以下のように入力してください。
POKE #701,`00000000
今度は矢印の文字の2段目が消えてしまいます。文字の2段目の内容を消さずに、横線を合成するにはどうしたらよいのでしょうか。
ここで論理和であるORの出番です。まず、PEEK命令を使ってメモリの内容を読み出し、その後合成します。
画面を消してから、CLP命令を使って文字のパターン(形状)を初期化します。
CLS
CLP
?CHR$(#E0)
これで準備OKです。次に以下のように入力します。
POKE #701, PEEK(#701) | `11111111
すると、先ほどとは異なり、矢印に合成される形で横線が表示されます。
`11111111でなく`10101010など、他の値でも試してみるとよいでしょう。
前回解説したANDとORを組み合わせて、キャラクタやマウスカーソルを表示する処理もできます。
ANDでキャラクタやマウスカーソルの輪郭を含めたマスクを作成し、その後でORを使ってキャラクタやマウスカーソルの形状を合成します。
現在では、このような合成処理は透明情報を持つαチャネルがあるので、ANDとORの処理をまとめて行うことができます。
最後に、Photoshopを使ってORの機能を使ってみましょう。とは言っても、Photoshopには明確にORとは書かれていません。ORはレイヤーの合成モードの「スクリーン」になります。
まず、何か写真などを開きます。その上に新しくレイヤーを作成します。レイヤー全体を真っ白に塗りつぶします。この状態で、レイヤーモードを「スクリーン」にします。
結果は真っ白な表示です。白色はビットにすると#FFFFFF(8bitの場合)、つまり全ビットが1です。1とのORですから、どんな色でも必ず白色になります。
次に黒色を選択します。ブラシか鉛筆ツールで白く塗りつぶしたレイヤーに、文字か何かを描きます。すると、下にある写真が表示されるはずです。
黒色はビットにすると#000000(8bitの場合)、つまり全ビットが0です。0とのスクリーン(OR)なので下の画像の色は全部透過します。
それでは次に、赤色(完全な赤色、つまりR=255,G=0,B=0)を選択します。レイヤーにブラシで描くと、下にある色が赤色なら紫に、緑色なら水色になります。これは常に赤色のビットが1になるためです。
青色や緑色にして描いてみるとよいでしょう。該当するビットだけが合成されるのがわかるはずです。
ビット処理に関する説明はこれで終わりです。他にもビットシフトなどもありますが、とりあえずNOT, XOR, AND, ORを知っていれば十分です。論理演算は動作を理解すればPhotoshopやIllustratorでも有効に使えるでしょう。
【古籏一浩】openspc@alpha.ocn.ne.jp
http://www.openspc2.org/
地元の本屋さんで漫画家のサイン会があったので行ってきました。実際にもらったサインはこれ↓
https://twitter.com/openspc/status/837904876835262464
絵は独学ということで、結局のところ好きこそ物の上手なれ、ということみたい。あとは資料は重要なので、残しておくか収集しておくといいようです。
コンピューター関係でも、1980年代の面白かった時代の資料を捨ててしまった人が多いみたいですが、うちは1980年代のマイコンBASICマガジンとか残してあります(同じ本を二冊残してあって、一冊が使用するもので、もう一冊が保存用。でも、保存状況はそんなによくないけど)。
それにしても、漫画家は締め切りに追われる運命にあるようで。締め切りは無視するのが心にはいいけど財布には痛い……。
それにしても、サイン会には長野市や山梨県、東京からなど遠くから来た人が割と多くて、本屋さんに近い人は数人程度(私もその数人のうちの一人)
東京からサインもらいにくるなんて熱心なファンだなあ、と感心。ところが、漫画家さんが帰る直前になって東京から来たと言う人の素性が明らかに……。
東京から来た男性「小学館の○○です。編集の○○がお世話になってます」
漫画家さん「え? ええっ〜〜〜?」
東京から来た男性「滞りなくサイン会が終わってよかったです」
サイン会のオチを見てしまった……。
・IchigoLatteでIoT体験
https://www.amazon.co.jp/dp/B06X3X1CHP
http://digiconcart.com/dccartstore/cart/info/2561/218591
・みんなのIchigoJam入門 BASICで楽しむゲーム作りと電子工作
http://www.amazon.co.jp/dp/4865940332/
・Premiere Pro & Media Encoder自動化サンプル集
http://www.amazon.co.jp/dp/4802090471/
・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/