ページ 11

論理積での条件分岐について

Posted: 2015年1月11日(日) 16:58
by へけぽん
当方、プログラミングを始めたばかりの初心者です。
タイトルの通り、論理積での条件分岐が上手くいかず、躓いています。

ある変数aが01と02の両方のビットを満たす時、という条件も加えようと思い、以下のように書きました。

  if( (a&3==3) && もう一つの条件文 ){    }

変数aと3のビット積をとれば、01と02の両方のビットを満たす7(x0111)や11(x1011)の時に
a&3==3は真となると思うのですが、望んだ結果が出てきません。

ちなみにもう一つの条件文のほうは b!=10 のようなもので、その変数bとaの値が連動して動く様なことはありません。

私はどこを間違ってるのでしょうか?

Re: 論理積での条件分岐について

Posted: 2015年1月11日(日) 17:07
by みけCAT
言語が書かれていませんが、C言語では&演算子より==演算子の方が優先順位が高いので、
(a&3==3)は(a&(3==3))すなわち(a&1)と解釈されるようです。
苦C:単語と記号
コンパイラ・コンパイルオプションによっては警告が出ます。

というわけで、
if( ((a&3)==3) && もう一つの条件文 ){    }
のように書くといいかもしれません。

解決しました

Posted: 2015年1月11日(日) 18:56
by へけぽん
教えていただいた通り ((a&3)==3) と書くことによって望んだとおりの結果が返ってくるようになりました。
ありがとうございました。

書き損ねていましたが、使用言語はc++です。

Re: 論理積での条件分岐について

Posted: 2015年1月11日(日) 18:58
by へけぽん
すみません、解決のチェックボックスに気が付いていませんでした。