
つい最近勉強を始めた者です。
int key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
if (key & PAD_INPUT_UP) y -= 4;
というプログラムですが、2行目がなぜ二つの条件が必要なのか分かりません。
上が押されているかどうかを見るだけならPAD_INPUT_UPが真であるだけで良さそうなのに
()内をPAD_INPUT_UPのみにすると何も押さなくても常に条件が成立した事になってしまいます。
逆に()内をkeyのみにすると何のキーを押しても条件成立になるようですが…。
No.1ベストアンサー
- 回答日時:
> 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 …
丁寧に回答いただきありがとうございます。
&についての誤解があったようです。ビット演算をしているのですね。
条件を変えた時の挙動についても一つ一つ説明していただき、大変よく分かりました。
お礼が遅くなり申し訳ありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
CPUが16bitでも32bitOSでコンパ...
-
最初に聞かれたこと
-
c言語の問題の説明、各所ごとに
-
Cのオブジェクトファイルの逆ア...
-
C言語 関数、変数の宣言について
-
C言語について。
-
C言語でファクト関数を使わずに...
-
プログラミング 素数か素数では...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
int16_t の _t は何?
-
DLLファイルの逆コンパイラにつ...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
DNCL(共テ用プログラミング言語...
-
C言語 配列と関数の練習問題
-
gccを行ってもexeファイルが生...
-
C言語 列挙型(enum型)変数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
繰り返し1行~28行までを順順に...
-
MATLABにおける行の挿入方法
-
c言語
-
C言語で余りがマイナスになる場合
-
!(否定)演算子について
-
五目並べ
-
Matlabのspdiags関数
-
StandardMLで整数リストの奇数...
-
Z80のフラグレジスタについて
-
matlab、対角行列の作り方
-
H8マイコン C言語でのプロ...
-
Pythonの公式リファレンスガイド
-
最大値を見つけるプログラム。
-
【MATLAB】配列内の数値のキャ...
-
MATLABのデータ抽出についてお...
-
OPENCVを使ったエピポーラ幾何...
-
パイソンのプログラミングにつ...
-
教えて下さい
-
特定のPCだけ動作しないVBAマク...
-
配列数式の解除
おすすめ情報