【例】値を交換
a=a^b
b=a^b
a=a^b
こうするとaとbが一時変数なしで入れ替わります。
【例】値の変化を検知
*start
a0=a1
stick a1,0xffff ;非トリガータイプ.
diff=a0^a1 ;前回の検知情報との差の部分を1とする.
release=diff&a0 ;差の部分で前回押されてた(=今、放された)bitを1とする.
trigger=diff&a1 ;差の部分で今回押されてた(=今、押された)bitを1とする.
wait 1
goto *start
値が変化したタイミングを検出するのにXORを使っています.
stick命令ではサポートしていない、キーを放した瞬間を検知できます.
【例】画像の上に重ねるカーソルや枠など
XORは、同じ数値で2回演算すると元に戻る性質がありますから、
例えば画像の一部を選択するためにドラッグできる四角形を書く場合は何かの色をXOR合成して選択範囲を描画します。
すると、次に範囲を更新するときにはもとの領域に同じXOR合成をすることで元に戻してから新しい領域を表示できます。
XOR合成のないHSPでやろうとしたら、選択範囲を書き戻すためにはどこかに保存しておかなきゃいけませんが、XORで合成ができれば退避の必要がありません。
【例】暗号化
同じ数値で2回演算すると元に戻る…ということなので、
ゲームのセーブデータを改変されることを妨害する目的で、何かの値とXORをとった値で保存しておいて、あとで読むときにもう一度XOR演算をします。