見て試しているうちに疑問がわいてきました。
(スレッドの内容は、stick による操作がうまくいかないというような内容です。)
スレ主さんは stick によるキーの入力状態を「if KEY=80:」と調べられていましたが、
リファレンスの stick の項を見ると"&"演算子の利用法が載っていたのでそれを試しました。
次のようなプログラムを作り、試してみました。
Ctrlキーを押すと"true"と表示されました。うまくいきました。
repeat stick a if a&64 : mes"true" wait 10 loop
「ふむふむ、if文は、条件式が満たされたときそれ以降の命令を実行するということだから、
"a&64"は"真"と判断されたのだな。」と考えました。
次に、Ctrlキーと→キーの同時押しで表示させようと条件式を変更しました。
すると、エラーこそ出ませんがうまくいきません。
repeat stick a if (a&64)&(a&4) : mes"true" wait 10 loop
"if(条件式1)&(条件式2)"
このかたちは、「条件式1が真、かつ条件式2も真のとき真となり、次の命令が実行される」
と理解していましたので、今回、「???」となってしまいました。
以前 Jaba をかじりかけたことがあるのですが、(すぐ挫折しました^^;)
stick のキーに割り振られた数字が、1,2,4,8、・・・と倍々になっているのを見て、
ビット演算?を思い出しました。(and や xor が何かやってました。^^;)
そこで次のような文を実行してみました。
なんとエラーにならない!そしてなんとなくつかめてきました。
mes 68&3 mes 68&5 mes 6>3 mes 6>9
・条件式が真なら"1"を、偽なら"0"を返すということ。
・"&"演算子は、両隣の数値を二進数になおし、各桁をくらべ、両方とも"1"の桁を"1"として
取り出した数値をかえすものだということ。
この文の条件式の「a&64」の部分は、 a にいろんなキー情報が入力されていても、
if a&64 : mes"true"
64 に対応したビットが取り出されるので Ctrlキーが押されていれば "64"が返され、
mes"true" が実行された、とわかりました。
これの場合は (a&64)&(a&4) が"0"になることがわかりましたので、それで mes"true" が
if (a&64)&(a&4) : mes"true"
実行されなかったのだなと思いました。
つまりHSPでは、if文は「条件式に返された値が"0"なら偽、"1〜"なら真とする」
ということなのかな?と予想をたてました。
(条件式が"-1"や"0.1"のような場合は、もう頭がパンクしそうなので考えていません。)
この考察結果は、まずまずではあるがどうも正確ではないという気がしています。
長文で読みづらく失礼しましたが、この考えは合っていますでしょうか?
なにか訂正や補足があれば、ぜひお願いします。
("&"演算子は、"="のように、条件式内で使われたときとそのほかで使われたときで
役割が違うのか、それとも同じなのか疑問は残っているのですが、
ここでは同じ役割を果たしているとして考えていきました。)