ビットを満たすとはどういうこと?

ウディタ講座&テクニック「ビットを使いこなす編」第1回

ウディタにおいて、「ビットを満たす」とはどういうことなのか?を解説します。

変数操作の右辺同士をつなぐ演算子に、ビット積(論理積)というものがありますが、それの解説の前に そもそも「ビットを満たす」とはどういうことなのか?を理解しましょう。

2進数の知識が必要となりますので、2進数?なにそれ? という方は こちらの記事 をご覧ください。

~のビットを満たす とはどういう状態のことなのか?

ずばり、~のビットを満たしている状態とは、2進数の「~の位」が1になっている状態を言います。

例と共に、詳しく説明します。下記のサンプルコードをご覧ください。

■変数操作: このEvのセルフ変数0 = 13 + 0 ■条件分岐(変数): 【1】 このEvのセルフ変数0 が 4 のビットを満たす -◇分岐: 【1】 [ このEvのセルフ変数0 が 4 のビットを満たす ]の場合↓ |▼ 4のビットを満たしている場合の処理 |■ ◇分岐終了◇

まず EvSelf0に、10進数の「13」が代入されましたね。

しかしこれは別の見方、つまり2進数的解釈をするならば「1101」が代入された とも言うことが出来ます。

ウディタでは、特定の数値を2進数として扱う場合、10進数から2進数への変換を脳内(または電卓など)で行う必要があるのです。

さて、このEvSelf0に代入された2進数「1101」を詳しく見てみますとこうなります。

10進数の「13」を2進数にすると「1101」
8の位4の位2の位1の位
1101

ここで、1の位、2の位、4の位……と表現しているところがありますが、この「位」という部分、これを「ビット」と言い換えてみましょう。

10進数の「13」を2進数にすると「1101」
8のビット4のビット2のビット1のビット
1101

感のいい方ならもうお気づきになるかもしれませんが、もう少し続けます。

次に、~のビットを満たすの条件に使われているのは「4」ですね。なので4のビットに注目してみてください。

10進数の「13」を2進数にすると「1101」
8のビット4のビット2のビット1のビット
1101

10進数の「13」は、2進数に変換すると「1101」となり、4のビットが1になる数値です。

~のビットを満たす とは、~の位(=ビット)が「1」になっている状態を言うので、今回の条件「13は4のビットを満たすか?」は「満たす」ということになります。

これは僕なりの解釈ではあるのですが、ウディタでいうところの「ビット」とは、2進数の桁の番号を表していると言ってもいいでしょう。

他の例も見てみましょう。

「~のビットを満たす」判定の例

10進数「18(2進数で10010)」は2のビットを満たすか?
16の位(ビット)8の位(ビット)4の位(ビット)2の位(ビット)1の位(ビット)
18を2進数に直すと:10010

これは、2のビットが「1」になっているので「2のビットを満たす」ということになります。

10進数「5(2進数で101)」は1のビットを満たすか?
16の位(ビット)8の位(ビット)4の位(ビット)2の位(ビット)1の位(ビット)
5 を2進数に直すと:00101

1のビットが「1」になっているので、「1のビットを満たす」ですね。

10進数「234(2進数で11101010)」は4のビットを満たすか?
128の位(ビット)64の位(ビット)32の位(ビット)16の位(ビット)8の位(ビット)4の位(ビット)2の位(ビット)1の位(ビット)
234を2進数に直すと:11101010

4のビットは「0」になっているので「4のビットを満たしていない」です。

ここまでで、「~のビットを満たす」がどういうことなのか、何となくでもお分かり頂けたでしょうか?

複数のビットをまとめて判定する

~のビットを満たす の判定をするとき、ここまでの例では1,2,4,8……という単体のビットにのみ注目して判定していましたが、実は複数のビットをまとめて判定する方法があります。

下のサンプルコードをご覧ください。

■変数操作: このEvのセルフ変数0 = 7 + 0 ■条件分岐(変数): 【1】 このEvのセルフ変数0 が 3 のビットを満たす -◇分岐: 【1】 [ このEvのセルフ変数0 が 3 のビットを満たす ]の場合↓ |▼ 3のビットを満たしている場合の処理 |■ ◇分岐終了◇

あれ、2進数に「3の位(ビット)」なんてないだろ!? と思ったあなたはスルドイ。しかしこれこそが、複数のビットをまとめて判定する方法なのです。

サンプルコードに使用された10進数「7」と、ビットを満たす判定に使用された「3」を、それぞれ2進数に直して見てみましょう。

10進数の「7」と「3」を2進数に直して比較する
4の位(ビット)2の位(ビット)1の位(ビット)
「7」を2進数に直すと:111
判定に使用される「3」を
2進数に直すと:
011

判定に使用された「3」は、1と2のビットが「1」になっています(=ビットを満たしている)。

この場合、「3」に含まれる(≒3が満たしている)1と2のビット両方をまとめて判定に使用することが出来ます。

この例でいうと、「7」は1と2のビットを満たしているか? という判定を行っているのです。

10進数の「7」と「3」を2進数に直して比較する
4の位(ビット)2の位(ビット)1の位(ビット)
「7」を2進数に直すと:111
判定に使用される「3」を
2進数に直すと:
011

「7」は、3のビット(1と2の両方のビット)満たしているということになります。

このように、「~のビットを満たす」という判定は、判定に使用される数値に含まれるすべてのビットを満たすか?という基準で行われているのです。

ここで注意が必要なのは、いずれかのビットを満たせなかった場合の最終的な判定結果です。たとえば下記のようなものです。

■変数操作: このEvのセルフ変数0 = 22 + 0 ■条件分岐(変数): 【1】 このEvのセルフ変数0 が 12 のビットを満たす -◇分岐: 【1】 [ このEvのセルフ変数0 が 12 のビットを満たす ]の場合↓ |▼ 12のビット(4と8の両方のビット)を満たしているときの処理 |■ ◇分岐終了◇
10進数の「22」は「12」のビットを満たすか?の判定
16の位(ビット)8の位(ビット)4の位(ビット)2の位(ビット)1の位(ビット)
10進数の「22」10110
判定に使用される「12」01100

4と8のビットに注目してください。10進数「22」は、4のビットは満たしているのですが、8のビットは満たせていないことがわかります。

この場合、「22は12のビット満たすか?」の最終的な判定結果は、『満たせていない』になります。

つまり、判定に使用される数値に含まれるビットの内、1つでも満たせないビットがあった場合、最終的な判定結果はすべて『満たせていない』になってしまうわけです。

「~のビットを満たす」まとめて判定する場合の例

26は10のビットを満たすか?の判定
16のビット8のビット4のビット2のビット1のビット
10進数の「26」11010
判定に使用される「10」01010

26は、10のビット(2と8のビット)を満たしているので、最終的な判定は『満たしている』です。

41は11のビットを満たすか?の判定
32のビット16のビット8のビット4のビット2のビット1のビット
10進数の「41」101001
判定に使用される「11」001011

41は、1と8のビットは満たせていますが、2のビットを満たせていません。満たせなかったビットがあったので、最終的な判定結果としては、41は11のビットを『満たせていない』になります。

まとめ

  • ウディタでいうところの「ビット」とは、2進数の桁の番号を表している。

  • ~のビットを満たす とは、その「~」に含まれるすべてのビット(2進数の桁)が「1」になっている状態を言う。

ビットを満たす とはどういうことか?を解説してみましたが、如何でしたでしょうか?

僕個人にとってわかりやすい表現を使って解説したので、プログラミングに精通している人にとっては「いやいや、それはおかしい表現だ」と思う部分もあるかも知れません。

ちなみに、なぜビット積よりも先に「ビットを満たす」を解説したかと言うと、そもそも「ビットを満たす」とはどういう状態か?を理解していれば、ビット積もすんなり理解できるんじゃないか?と思ったからです。

以上、「ビットを満たす」とはどういうことなのか? の解説でした。

アザー


広告

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA