2013/12/29 (Sun) Comment [0] Trackback [0]
こんにちは、ナイスピです。
久々だね。私も改造再会してがんばってる。
今回は特に記事にかくこともないので、演算についてまとめてみる。
OR演算とかAND演算とかXOR演算とかわからないあなたもこれを使えば”要するに”がわかる。
…ハズです。
OR演算
いわゆる和集合の演算なのですが、下手に数学勉強してるとここでつまづく。
何が和集合なのか?それを考えるにあたってまずしっていてもらいたいのは
コンピューターが2進数でできていることから考えないといけない。
たとえばここに16進数の48 がある。これを2進数であらわすならば
0100 1000
ってなります。
ここで注釈ですが私の表記の場合最初の4bitを上桁、後ろの4bitを下桁としてますが
書かれる場所によっては真逆なことが多いいです。つまり
0001 0010
とかかれる場合です。実はこっちの表記の方が自然で、いわゆる二進数の桁をそのまんま羅列したものです。
私の表記は1byteの数を二進数表記にしたにすぎないのですが、
でもまぁ、今回は最初に言った表記で解説していきます。
たとえば今からあるメモリに5bit目をたてたい!って思ったとします。
そういうとき
0001 0000
をそのまま代入する命令をかけば5bit目がたちますが
他のbitが0になってしまいます。
ある特定のbitをたたせたいのに他のbitはそのままで影響させたくない。
そういう場合に使われるのがOR演算です。
つまり今回メモリ$98に5bit目をたたせたいと思ったら
A5 98 (Aレジスタに$98の値をいれ)
09 10 (AレジスタをOR演算して)
85 98 (その結果を$98に代入する)
とまぁ、こんな感じ。
こうするとどうなるかというと$98には必ず5bit目がたちます。
ハッキリ言ってすごい便利です。(これ使わないで改造してた時代が私にもあったのだ。)
AND演算
いわゆる積集合の演算なのですが。積集合ってなんだよって話なので使い方から。
簡単に言えばOR演算の逆であるbitを0にするときに使います。
が…その用途で使われるのは結構珍しいです。
もうひとつの使い方として、あるbitに着目するときです。
具体的にはどういうことかというと
0111 0110
ってAレジスタに数が入っていたとします。でも見たいのはこの下4ケタだけでいい。
上の値はどうでもいい!
っていうときに
0000 1111
とAND演算させると…
0000 0110
となり上桁が全部0になります。これで上桁がどんな値であろうと
下桁だけで話ができてしまうので比較演算と相性がいいです。
(比較演算については改造wikiを参照)
XOR演算
いわゆる排他的論理和の集合の演算なのですが、
この言葉にいたっては数学科でも知らない人がいるかもしれない。(単にうちの大学がバカなんだ。)
でも意味はここではいわない。
この演算は他の演算とやや毛色が違い、どういうときに使うかと
あるbitの値を入れ替えるときにつかいます。
たとえば
0011 1100
を
A.1111 1111
B.1111 0000
C.0000 0001
これらでXOR演算すると
A.1100 0011
B.1100 1100
C.0011 1101
ってなります。
この性質何がすごいかっていうとAでXOR演算する前の結果と
後の結果を足すとすべてのbitが1になります。
つまるところ、255からある値を引いているのとこれは同じことになります。
どうつかうかというと画面右側にいる敵と左側にいる敵を左右対称な動きをさせたいときとか
右側のプログラムだけかいて、左側のY座標は右側のY座標でXOR演算させれば
後はX座標は右と同じに設定すればOK。簡単設計になります。
さて、かなりわかりにくい説明になったのでまとめます(最初からこれだけでよかったのでは)。
OR演算
・あるbitをたたせるときに使う。
AND演算
・あるbitをたたせないときに使う。
・あるbitに着目させて他のbitについて考えないときに使う。
XOR演算
・あるbitがたっていたらたたせず、たっていなかったらたたせる。(天邪鬼)
・全部1たててXORすると対象になる。
とまぁ、多分これ以外にも大量にあると思いますが私の改造経験上これぐらいで済んでる。
ちなみにこの3つの演算で普通にスプライトの動きを制御したい程度の場合
いちばん使われるのはAND演算だと思います。(おもに二つ目がすごく便利)
わかんないけど、改造をみたときにこの動きはもしかしてこれをこうしているんじゃないか?
って考えながらみると結構楽しいのでオススメ。それではこの辺で、では。
最後に、わかんない用語は逐一google先生で調べ見るといいかも。
私が今回やってるのはいわゆる自分の知っているもののウチ、
google先生を使ってもなかなか見つからない知識を言ってるだけだから。
それではこんどこそ本当に。では。
久々だね。私も改造再会してがんばってる。
今回は特に記事にかくこともないので、演算についてまとめてみる。
OR演算とかAND演算とかXOR演算とかわからないあなたもこれを使えば”要するに”がわかる。
…ハズです。
OR演算
いわゆる和集合の演算なのですが、下手に数学勉強してるとここでつまづく。
何が和集合なのか?それを考えるにあたってまずしっていてもらいたいのは
コンピューターが2進数でできていることから考えないといけない。
たとえばここに16進数の48 がある。これを2進数であらわすならば
0100 1000
ってなります。
ここで注釈ですが私の表記の場合最初の4bitを上桁、後ろの4bitを下桁としてますが
書かれる場所によっては真逆なことが多いいです。つまり
0001 0010
とかかれる場合です。実はこっちの表記の方が自然で、いわゆる二進数の桁をそのまんま羅列したものです。
私の表記は1byteの数を二進数表記にしたにすぎないのですが、
でもまぁ、今回は最初に言った表記で解説していきます。
たとえば今からあるメモリに5bit目をたてたい!って思ったとします。
そういうとき
0001 0000
をそのまま代入する命令をかけば5bit目がたちますが
他のbitが0になってしまいます。
ある特定のbitをたたせたいのに他のbitはそのままで影響させたくない。
そういう場合に使われるのがOR演算です。
つまり今回メモリ$98に5bit目をたたせたいと思ったら
A5 98 (Aレジスタに$98の値をいれ)
09 10 (AレジスタをOR演算して)
85 98 (その結果を$98に代入する)
とまぁ、こんな感じ。
こうするとどうなるかというと$98には必ず5bit目がたちます。
ハッキリ言ってすごい便利です。(これ使わないで改造してた時代が私にもあったのだ。)
AND演算
いわゆる積集合の演算なのですが。積集合ってなんだよって話なので使い方から。
簡単に言えばOR演算の逆であるbitを0にするときに使います。
が…その用途で使われるのは結構珍しいです。
もうひとつの使い方として、あるbitに着目するときです。
具体的にはどういうことかというと
0111 0110
ってAレジスタに数が入っていたとします。でも見たいのはこの下4ケタだけでいい。
上の値はどうでもいい!
っていうときに
0000 1111
とAND演算させると…
0000 0110
となり上桁が全部0になります。これで上桁がどんな値であろうと
下桁だけで話ができてしまうので比較演算と相性がいいです。
(比較演算については改造wikiを参照)
XOR演算
いわゆる排他的論理和の集合の演算なのですが、
この言葉にいたっては数学科でも知らない人がいるかもしれない。(単にうちの大学がバカなんだ。)
でも意味はここではいわない。
この演算は他の演算とやや毛色が違い、どういうときに使うかと
あるbitの値を入れ替えるときにつかいます。
たとえば
0011 1100
を
A.1111 1111
B.1111 0000
C.0000 0001
これらでXOR演算すると
A.1100 0011
B.1100 1100
C.0011 1101
ってなります。
この性質何がすごいかっていうとAでXOR演算する前の結果と
後の結果を足すとすべてのbitが1になります。
つまるところ、255からある値を引いているのとこれは同じことになります。
どうつかうかというと画面右側にいる敵と左側にいる敵を左右対称な動きをさせたいときとか
右側のプログラムだけかいて、左側のY座標は右側のY座標でXOR演算させれば
後はX座標は右と同じに設定すればOK。簡単設計になります。
さて、かなりわかりにくい説明になったのでまとめます(最初からこれだけでよかったのでは)。
OR演算
・あるbitをたたせるときに使う。
AND演算
・あるbitをたたせないときに使う。
・あるbitに着目させて他のbitについて考えないときに使う。
XOR演算
・あるbitがたっていたらたたせず、たっていなかったらたたせる。(天邪鬼)
・全部1たててXORすると対象になる。
とまぁ、多分これ以外にも大量にあると思いますが私の改造経験上これぐらいで済んでる。
ちなみにこの3つの演算で普通にスプライトの動きを制御したい程度の場合
いちばん使われるのはAND演算だと思います。(おもに二つ目がすごく便利)
わかんないけど、改造をみたときにこの動きはもしかしてこれをこうしているんじゃないか?
って考えながらみると結構楽しいのでオススメ。それではこの辺で、では。
最後に、わかんない用語は逐一google先生で調べ見るといいかも。
私が今回やってるのはいわゆる自分の知っているもののウチ、
google先生を使ってもなかなか見つからない知識を言ってるだけだから。
それではこんどこそ本当に。では。
スポンサーサイト