スクリプト/ビット演算関数(履歴ID:720)

最終投稿者:Material 315238 1 mini shainy 更新:2018/08/10 01:40:19

概要


ビット演算関数は数値を10進数ではなく、符号付き32ビット整数を2進表現したものとして扱います。例えば、10進数の10は00000000000000000000000000001010です。ビット演算関数はこのように2進表現にした上で演算を行いますが、標準のArrpの数値を返します。

使用できる関数には次のものがあります。

演算関数記述例説明
ビットAND
bitwiseAND(a, b)
対応するビットがともに1である各ビットについて1を返します。
ビットOR
bitwiseOR(a, b)
対応するビットがどちらかまたはともに1である各ビットについて1を返します。
ビットXOR
bitwiseXOR(a, b)
対応するビットがどちらか一方のみ1である各ビットについて1を返します。
ビットNOT
bitwiseNOT(value)
各ビットを反転します。
左シフト
leftShift(a, b)
2進表現のaをbビット分だけ左にシフトします。
右シフト
rightShift(a, b)
2進表現のaをbビット分だけ右にシフトします。

目次


導入方法


ビット演算関数は標準のArrpでは使うことができません。あなたのゲームに導入するには、以下のソースコードをコピーしてあなたのスクリプトに貼り付けてください。またこのとき開始スクリプトで行わないと、他のシーンやマップでは使うことができません。

以下ソースコード。

false


ビット演算関数


ビットAND(bitwiseAND関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes

同じ位置のビットを比較してどちらも1の場合だけ1に、それ以外は0にします。
and = bitwiseAND(a, b)

  • 第1引数は演算する整数
  • 第2引数は演算する整数
  • 返り値は第1引数と第2引数のビットAND

11と14のビットANDは10が返ります。
and = bitwiseAND(11, 14)
speak(and) #10

11と14を2進表現にします。各ビットを比較し両方が1の場合は1に、それ以外(1と0、0と0など)の場合は0にします。その結果2進数の1000となり、10進数の10が返ります。
0000 0000 0000 0000 0000 0000 0000 1011 = 11
0000 0000 0000 0000 0000 0000 0000 1110 = 14
---- ---- ---- ---- ---- ---- ---- ----   --
0000 0000 0000 0000 0000 0000 0000 1010 = 10


ビットOR(bitwiseOR関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes

同じ位置のビットを比較してどちらかが1の場合は1に、どちらも0の場合は0にします。
or = bitwiseOR(a, b)

  • 第1引数は演算する整数
  • 第2引数は演算する整数
  • 返り値は第1引数と第2引数のビットOR

10と12のビットORは14が返ります。
or = bitwiseOR(10, 12)
speak(or) #14

10と12を2進表現にします。各ビットを比較しどちらかが1の場合(どちらも1の場合も含む)は1に、どちらも0の場合は0にします。その結果2進数の1110となり、10進数の14が返ります。
0000 0000 0000 0000 0000 0000 0000 1010 = 10
0000 0000 0000 0000 0000 0000 0000 1100 = 12
---- ---- ---- ---- ---- ---- ---- ----   --
0000 0000 0000 0000 0000 0000 0000 1110 = 14


ビットXOR(bitwiseXOR関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes

同じ位置のビットを比較してどちらか一方だけが1の場合は1に、それ以外は0にします。
xor = bitwiseXOR(a, b)

  • 第1引数は演算する整数
  • 第2引数は演算する整数
  • 返り値は第1引数と第2引数のビットXOR

10と12のビットXORは6が返ります。
xor = bitwiseXOR(10, 12)
speak(xor) #6

10と12を2進表現にします。各ビットを比較しどちらか一方だけが1の場合は1に、それ以外は0にします。ビットORとは異なり、1と1の場合は0になります。その結果2進数の110となり、10進数の6が返ります。
0000 0000 0000 0000 0000 0000 0000 1010 = 10
0000 0000 0000 0000 0000 0000 0000 1100 = 12
---- ---- ---- ---- ---- ---- ---- ----   --
0000 0000 0000 0000 0000 0000 0000 0110 =  6


ビットNOT(bitwiseNOT関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes

ビットを反転します。
not = bitwiseNOT(value)

  • 第1引数は演算する整数
  • 返り値は第1引数のビットNOT

10のビットNOTは-11が返ります。
not = bitwiseNOT(10)
speak(not) #-11

10を2進表現にします。各ビットを0の場合は1に、1の場合は0にします。その結果2進数の11111111111111111111111111110101となり、10進数の-11が返ります。
0000 0000 0000 0000 0000 0000 0000 1010 =  10
---- ---- ---- ---- ---- ---- ---- ----   ---
1111 1111 1111 1111 1111 1111 1111 0101 = -11


左シフト(leftShift関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes


右シフト(rightShift関数)


ゲームタイプ利用
2DアクションRPGYes
2DRPGYes
ノベルゲームYes


※編集中※