アプリ版:「スタンプのみでお礼する」機能のリリースについて

つい最近勉強を始めた者です。

int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y -= 4;
というプログラムですが、2行目がなぜ二つの条件が必要なのか分かりません。
上が押されているかどうかを見るだけならPAD_INPUT_UPが真であるだけで良さそうなのに
()内をPAD_INPUT_UPのみにすると何も押さなくても常に条件が成立した事になってしまいます。
逆に()内をkeyのみにすると何のキーを押しても条件成立になるようですが…。

A 回答 (2件)

> 2行目がなぜ二つの条件が必要なのか分かりません。



二つの条件のANDをみているのではありません、ビット演算を行っているのです。
keyは、GetJoypadInputState(DX_INPUT_KEY_PAD1)の戻り値(何かが押されていれば0以外のコードを返す)、PAD_INPUT_UPは、↑キーを表す定数(ヘッダファイルか何かで定義されているはず)です。

つまり、GetJoypadInputState(DX_INPUT_KEY_PAD1)の戻り値と定数(PAD_INPUT_UP)でANDのビット演算を行った結果が0でなければ(= ↑キーが押されていれば)y -= 4;を実行するのです。


> PAD_INPUT_UPのみにすると何も押さなくても常に条件が成立した事になってしまいます。
PAD_INPUT_UPは、0以外の値が定義されているので、常に条件が成立します。

> keyのみにすると何のキーを押しても条件成立になるようですが…。
何かのキーを押すと、GetJoypadInputState(DX_INPUT_KEY_PAD1)から0以外の値が返るので、常に条件が成立します。


http://dxlib.o.oo7.jp/function/dxfunc_input.html …
    • good
    • 0
この回答へのお礼

丁寧に回答いただきありがとうございます。
&についての誤解があったようです。ビット演算をしているのですね。

条件を変えた時の挙動についても一つ一つ説明していただき、大変よく分かりました。
お礼が遅くなり申し訳ありません。

お礼日時:2016/03/27 07:36

この&はif条件のandではなく&演算子です。

変数keyとdefine値PAD_INPUT_UPのビット演算をしています。
ちなみにif文の複数条件は&&です。
    • good
    • 0
この回答へのお礼

素早い回答ありがとうございます。
if文の使い方とビット演算が分かっていなかったようですね。

お礼が遅くなり申し訳ありません。

お礼日時:2016/03/27 07:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!