HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0427
wigginxorについて3未解決


wiggin

リンク

2008/4/27(Sun) 23:20:22|NO.15455

排他的論理和(xor)の使い方がいまいち分かりません。これはどういった時に
使うのでしょうか?



この記事に返信する


begriff

リンク

2008/4/27(Sun) 23:40:16|NO.15457


mes 1 xor 1 mes 1 xor 0 mes 0 xor 1 mes 0 xor 0
a xor b で bが1だと aが反転(0なら1 1なら0)します。

実践例的な

repeat wait 10 a=a xor 1 mes a loop
xor を通過するだびにaが反転し続けます。



SYAM

リンク

2008/4/28(Mon) 04:11:11|NO.15467

【例】値を交換

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演算をします。



GENKI

リンク

2008/4/28(Mon) 20:53:04|NO.15471

私も動作を理解しても、はじめは”何に使うんだ?”という印象しかなかったですね。
暗号化とか特定のビットを0にしたりとかするのに使ったり…今でもあんまり思いつきませんが、
一応参考になりそうなものを提示しておきます。
http://hspdev-wiki.net/?%BE%AE%A5%EF%A5%B6%2F%A5%D3%A5%C3%A5%C8%C1%E0%BA%EE



ONION software Copyright 1997-2023(c) All rights reserved.