fc2ブログ

二進数とビット演算

ちょっとググっただけの知識ですので期待はしないように。
ちょっとだけ実践してます。

まずビット演算使うために基本的な二進数。

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

判断時は同じように & を使って判断します。

多分習うより慣れろです。理解するとそんなに難しくないものなので。
間違っていたらご指摘お願いします。

コメントの投稿

非公開コメント

No title

使い方次第では0と1以上の使い分けも可能です。

例えばAIのレベルに上3ビット、AIのオン/オフに下1ビットを当てると
AIレベル=5、AIオンをvar(x)=11と表せたり。

11(1011)&1(0001)=1(0001) ;AIオン
11(1011)&14(1110)=10(1010)
10/2=5(101) ;AIレベル5

2で割るのがミソですかね。

No title

>>名無しさん
なるほど参考になりました!
これでかなり変数の節約につながりそうですね。
プロフィール

SAIKEI

Author:SAIKEI
MUGEN製作跡地
現在製作はしておりません。
適当にはまってるゲームの攻略記事書いてます。

リンクフリーです

管理画面

キャラ公開
クリップボード01
・ユダ
本体
更新日:13/03/27
sff,sndファイル
更新日:11/03/03 クリップボード01
・ケンシロウ
本体(AI無し)
更新日:12/06/17
sff,sndファイル
更新日:12/05/21
AIが入ってる旧バージョン本体
更新日:12/02/19 クリップボード01
・サウザー
本体
更新日:10/12/26
sff,sndファイル
更新日:10/11/28

・ラオウAI(Ataru氏製)
AI
更新日:10/07/11
SFF修正ファイル
更新日:10/07/11

yukari_20090921184412.jpg
・影紫(09/08/24更新版)
※凶悪キャラにより注意
S-Yukari

・宇宙意思強化パッチ
パッチ
更新日 10/04/04
カテゴリ
月別アーカイブ
ブログカウンター
現在の閲覧者数:
検索フォーム
最新コメント
最新記事
リンク