ビット演算は普段使っている演算よりも低級言語(機械語)寄りの機能で、ビットを操作する必要が無い場合には利用されません。

このエントリーをはてなブックマークに追加

高級言語しか経験の無い現代の職業プログラマの中には、低級言語で当たり前に利用されていたビット演算やビット演算子を利用した経験の無い人がいると言われています。

組み込み系ではビット演算は必須になるけれど、あるいは GML を使ったゲーム開発にビット演算というのは、いかにもミスマッチだし基本的には必須機能でもありません。

しかしそれでもビット演算が GML に実装されているのは、ビット演算に一応確かな利用価値があるから、とも言えます。

処理が速い

現代のコンパイラは最適化をしてくれるため、ビット演算の利用は速度面であまり恩恵も無いと言われます。

高級言語ではコードの可読性を落としてまでビット演算を使ってピンポイントで速度向上を狙うよりも、読みやすいコードとアルゴリズム改善に力入れた方が開発効率も良いわけで、GML の場合まさしくそれに当たります。

しかしほとんどのプログラミング言語でビット演算はたしかに普通の演算より高速に処理されます。GML でもビット演算を使うと処理高速化の恩恵はあります。

例えばコンピュータ的には乗算・除算は加算・減算と比較すればやや重い処理(計算に数クロック以上かかる)となりますが、ビット演算は 1 クロックで実行できます。

だから乗算を

    a = 3*3;

このような処理は GML でも乗算を無くして

    a = ((3<<1) + 3);

ビットシフトと加算で書きなおせば、乗算よりも高速に計算ができます。

メモリの使用を一部圧縮できる

GML にはブール型(ブーリアン型)が無いし、メモリに関してもゲームは主にグラフィックスと音でリソースを食いまくるからほぼ意味無いのですが、多数のフラグ管理をする際にビット積を利用すればかなり便利にはなります。

これはビット積の利用例で具体的に説明しますが、要するにビット演算と POW2 を利用すれば一つの変数で複数のフラグを管理できるようになるというものです。

ビット演算を利用しない場合は複数の変数と条件演算が必要になるため、コードの書き方も複雑にもなります。ビット演算を利用すればシンプルに速く、変数も少なく、と理想的な処理が可能に。

次のページへ