二進数とビット演算
ちょっとググっただけの知識ですので期待はしないように。
ちょっとだけ実践してます。
まずビット演算使うために基本的な二進数。
0 = 0
1 = 1
2 = 10
4 = 100
8 = 1000
16 = 10000
32 = 100000
64 = 1000000
128 = 10000000
256 = 100000000
このように2のn乗は一つが1でそれ以外は0を指しています。
(二進数を使うと両手の指で1023まで数えることができます。)
数え方(左10進数 右2進数)
0=0
1=1
2=10
3=11
4=100
5=101
6=110
7=111
8=1000
9=1001
10=1010
11=1011
12=1100
13=1101
14=1110
15=1111
16=10000
このように数えます。
これを利用して、
一個の複数のフラグを代入することが可能です(ただし0か1かの二つしか判断できない、いわゆるスイッチ)。
=============================================================================
ビット演算でフラグをonにするとき。
| を使います。OR処理です。
9と4があるとします。
記述では 9 | 4 となります。
9=1001
4=0100なので、
1001
0100
↓
1101
このようにどちらかが1であれば1を返します。
1101は13なので すなわち 9 | 4 = 13 となります。
ちなみにoffにするには^を使う必要があります。正確には反転ですが。
フラグを判別する場合 & を使います。つまりAND処理です。
11と6があったとします。
mugenでの記述だと 11&6 ですね。
ビット演算なので11と6は二進数に変換されます。AND処理ではどちらも1である場合1を返すので
1011
0110
↓
0010
となり、0010とは2です。すなわち 11&6 = 2 となります。
では実際に利用する場合の例。
一つのフラグを調べたいときは2のn乗が使いやすいです。
例えばある変数が1011101となっている場合、
var(X)&1 は 1
var(X)&2 は 0
var(X)&4 は 4
var(X)&8 は 8
var(X)&16 は 16
var(X)&32 は 0
var(X)&64 は 64
0以外は真、0は偽を指します。
つまりこの変数は7個のフラグを同時に管理しています。
=============================================================================
例えばAIフラグと死亡フラグを一つの変数で判断してみます。
------------変数にフラグをonにしたいとき。
AIフラグとか。
trigger1 = var(X) := var(X) | 1
死亡フラグとか
trigger2 = var(X) := var(X) | ((死亡条件)*16)
どちらも満たすと var(X) = 1001 となります。
------------フラグを感知したいとき、
trigger1 = var(X) & 1
1001
0001
↓
0001
これでvar(X)からAIがonかoffかを感知できます。
trigger1 = var(X) & 16
1001
1000
↓
1000
これで同じvar(X)から死亡フラグも感知できます。
コマンド使用にするのが一番使えるそうです。
例えば、
trigger1 = command = "holddown"
trigger1 = var(X) := var(X) | 1 &&0
trigger2 = command = "holddown"
trigger2 = var(X) := var(X) | 2 &&0
trigger3 = command = "a"
trigger3 = var(X) := var(X) | 4 &&0
判断時は同じように & を使って判断します。
多分習うより慣れろです。理解するとそんなに難しくないものなので。
間違っていたらご指摘お願いします。
ちょっとだけ実践してます。
まずビット演算使うために基本的な二進数。
0 = 0
1 = 1
2 = 10
4 = 100
8 = 1000
16 = 10000
32 = 100000
64 = 1000000
128 = 10000000
256 = 100000000
このように2のn乗は一つが1でそれ以外は0を指しています。
(二進数を使うと両手の指で1023まで数えることができます。)
数え方(左10進数 右2進数)
0=0
1=1
2=10
3=11
4=100
5=101
6=110
7=111
8=1000
9=1001
10=1010
11=1011
12=1100
13=1101
14=1110
15=1111
16=10000
このように数えます。
これを利用して、
一個の複数のフラグを代入することが可能です(ただし0か1かの二つしか判断できない、いわゆるスイッチ)。
=============================================================================
ビット演算でフラグをonにするとき。
| を使います。OR処理です。
9と4があるとします。
記述では 9 | 4 となります。
9=1001
4=0100なので、
1001
0100
↓
1101
このようにどちらかが1であれば1を返します。
1101は13なので すなわち 9 | 4 = 13 となります。
ちなみにoffにするには^を使う必要があります。正確には反転ですが。
フラグを判別する場合 & を使います。つまりAND処理です。
11と6があったとします。
mugenでの記述だと 11&6 ですね。
ビット演算なので11と6は二進数に変換されます。AND処理ではどちらも1である場合1を返すので
1011
0110
↓
0010
となり、0010とは2です。すなわち 11&6 = 2 となります。
では実際に利用する場合の例。
一つのフラグを調べたいときは2のn乗が使いやすいです。
例えばある変数が1011101となっている場合、
var(X)&1 は 1
var(X)&2 は 0
var(X)&4 は 4
var(X)&8 は 8
var(X)&16 は 16
var(X)&32 は 0
var(X)&64 は 64
0以外は真、0は偽を指します。
つまりこの変数は7個のフラグを同時に管理しています。
=============================================================================
例えばAIフラグと死亡フラグを一つの変数で判断してみます。
------------変数にフラグをonにしたいとき。
AIフラグとか。
trigger1 = var(X) := var(X) | 1
死亡フラグとか
trigger2 = var(X) := var(X) | ((死亡条件)*16)
どちらも満たすと var(X) = 1001 となります。
------------フラグを感知したいとき、
trigger1 = var(X) & 1
1001
0001
↓
0001
これでvar(X)からAIがonかoffかを感知できます。
trigger1 = var(X) & 16
1001
1000
↓
1000
これで同じvar(X)から死亡フラグも感知できます。
コマンド使用にするのが一番使えるそうです。
例えば、
trigger1 = command = "holddown"
trigger1 = var(X) := var(X) | 1 &&0
trigger2 = command = "holddown"
trigger2 = var(X) := var(X) | 2 &&0
trigger3 = command = "a"
trigger3 = var(X) := var(X) | 4 &&0
判断時は同じように & を使って判断します。
多分習うより慣れろです。理解するとそんなに難しくないものなので。
間違っていたらご指摘お願いします。