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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
へけぽん

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

#1

投稿記事 by へけぽん » 10年前

当方、プログラミングを始めたばかりの初心者です。
タイトルの通り、論理積での条件分岐が上手くいかず、躓いています。

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

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

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

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

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

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

#2

投稿記事 by みけCAT » 10年前

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

というわけで、
if( ((a&3)==3) && もう一つの条件文 ){    }
のように書くといいかもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

へけぽん

解決しました

#3

投稿記事 by へけぽん » 10年前

教えていただいた通り ((a&3)==3) と書くことによって望んだとおりの結果が返ってくるようになりました。
ありがとうございました。

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

へけぽん

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

#4

投稿記事 by へけぽん » 10年前

すみません、解決のチェックボックスに気が付いていませんでした。

閉鎖

“C言語何でも質問掲示板” へ戻る