【じゃ】HSP初質P52【自己解決ゥ!】
■ このスレッドは過去ログ倉庫に格納されています
0591デフォルトの名無しさん
2008/02/14(木) 01:11:47if文の基本は、ifに続く条件が真か偽かになります。a=0はaが0なら真、それ以外なら偽になります。
また、HSPや他の言語でもそうですが、真=1 偽=0として扱われます。
これを踏まえて、最初の条件を見ると、[ Key&1 and a=0 ]とあります。
人間にとっては10進数が基本ですが、PCにとっては2進数が基本なので
Keyという変数から0ビット以外をマスクして取り出す、という風に解釈します。
仮にKeyが0ならば(←キーは押していない)PCからは 0000 0000 0000 0000と0が16個ある状態になります。
これと10進数でいう1とを比べて第0ビットを取り出すと0になります。
0000 0000 0000 0000 ->変数Keyの中身
0000 0000 0000 0001 ->マスク
-------------------
0000 0000 0000 0000 ->10進数では0
結果は0になり偽となってif文では条件は成立していないと(0=偽だから)みなされます。
キーボードの↑を押すとKeyは1になります。
0000 0000 0000 0001 ->変数Keyの中身
0000 0000 0000 0001 ->マスク
-------------------
0000 0000 0000 0001 ->10進数では1
結果は1となり真となります。if文では条件が成立したと(1=真だから)みなされます。
同様に2(↑キー)を評価すると
0000 0000 0000 0010 ->変数Keyの中身
0000 0000 0000 0010 ->マスク
-------------------
0000 0000 0000 0010 ->10進数では2
となり真とは判断されずに、if文は成立していないとみなされます。
ので、こちらの思惑に沿わない処理が行われてしまいます。
[>>1]とはビットシフトをさせています。この場合、右に1ビットずらしています。
[0000 0000 0000 0010]を右に1ビットずらすと[0000 0000 0000 0001]になります。
結果が[2]な2進数を右にシフトする事で[1]に変換して真になるようにしてるんです。
でも普通はこんな書き方はしません。
■ このスレッドは過去ログ倉庫に格納されています