• ベストアンサー

if ( a & b == b )

aはビットフラグで、メモリ、FDD、HDD、FANなどの故障状態を表しています。 bは条件です。FDDとHDDが両方故障なら2進で11です。 FDDとHDDが両方故障であるのを得るために2進の11がdefineしてあるのは変更できませんが、FDDとHDDが両方故障であるのを調べるために if ( a & b == b ) を実行するのには何か無駄がある気がしますが、もっとよい方法はありますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

> if((a^b) ==0) または if(!(a^b)) a^bが0になるのはaとbが等しいときですから、 これは以下のif文と同じことになります。 > if(a==b) これはたぶん、質問の意図とは違う動作だと思います。 # なお、==や!演算子は^演算子よりも優先順位が高いので # ^を先に演算させたいならかっこが必要です。 私もちょっと考えて、if(!(~a&b)) が思いつきましたが あまり効率が良さそうでもないですね。 (これならif((a&b)==b)の方がまだ意図が分かりやすい分良さそうです。)

letrmf
質問者

お礼

処理速度は速かったので効率は悪くないと思いますよ。

その他の回答 (3)

回答No.4

括弧のつけ忘れや、多分、実際の変数名は a や b じゃないですよねというのはありますが、この書き方は、ハードウエアに関わるソフトでは、よく見られる書き方です。 ですから、無駄があるというより、この標記なら、一発で意図が理解してもらえるという利点をどう考えるかになるでしょう。

letrmf
質問者

お礼

今回は速さ重視で作ろうとしています。 ソースの読みやすさはあきらめました。

  • myfrend
  • ベストアンサー率37% (17/45)
回答No.2

1bitづつビットフィールドで参照するか、 排他的論理和で見るのがいいと思います。 使用メモリも少なく、実行ステートも早くなります。   if(a^b ==0) または if(!a^b)

letrmf
質問者

お礼

ありがとうございます。 if(!a^b) はよいですね。 質問が不足していました。 FDDとHDDが両方故障であるのを調べるために ↓ 少なくともFDDとHDDが両方故障であるのを調べるために このように訂正します。 そうすると if(!((a&2)^b)) ですよね?こちらの方が速かったのでこれを使おうと思います。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

if ( (a & b) == b )の間違いでは?

letrmf
質問者

お礼

はい、質問文にかっこが不足しています。

関連するQ&A

  • if(A1&B1="","なし"

    A1とB1の両方に何も入力されてなければ、C1に「なし」を表示し、片方に何か入力されていれば、「不十分」と表示し、両方に何か入力されていれば、「あり」と表示するにはどうすればいいですか? =if(A1&B1="","なし"・・・みたいに、A1&B1みたいな表現はできますか*

  • IF関数教えてください。if(and(a<3,a<b),"○","×")

    いつも色々、教えて頂き有難うございます。 if(and(a<3,a<b),"○","×") もし、aが3より小さく、かつaはbより小さい時は、○。 そうでない時は、×と関数で表せたのですが、 本当は、この条件に、 又a=b=1の時も○という条件を加えたいです。 どのような関数にすれば良いのでしょうか?

  • 【エクセル/excel】if関数とフラグ

    if関数でフラグを立てたものからさらにif関数で 条件を絞ってフラグを立てようとするのですが エラーが表示されてうまくいきません。   A  B  C 1 1  0  * 2 1  1  * 3 2  1  * 上記の図で (1)A1:B3の範囲でif関数を用いてフラグを立てます。 (2)C1:C3の範囲でif関数を用いてフラグを立てます。 (たとえばA行とB行がともに1ならば1というフラグ を立てるといった感じです。) 式の立て方がいけないんでしょうか?どなたか教えて下さい。 なんだか至極簡単なことのような気もして申し訳ありません。

  • IF文

    (A)IF 条件 THEN 単純実行文1 ELSE 単純実行文2 (B)IF 条件 THEN 実行処理1 ELSE 実行処理2 Aの文では単純実行分なのになぜ改行すると(B)の文みたいに実行処理になるのでしょうか? 実行処理と単純実行文の違いを教えてください

  • A・B列のどちらかにフラグがあったらC列にフラグを返す

    簡単な事かもしれませんが、教えてください。 A列とB列にそれぞれフラグがたっています。 どちらか片方に(もちろん両方も)でもフラグがたっている先をC列にフラグを返す。 もし、両方にフラグがたっていない先に0やエラーが出るようなら、それも出ないような関数を教えてください。 よろしくお願いします。。

  • 【ExcelVBA】IF条件を満たしているのに、IF条件のところで止まってしまう

    Sub test1() 変数1 = IsEmpty(Range("C1")) If Range("A1") > 0 And Range("B1") = 0 And 変数1 = True Then   test2 End If End Sub 止まったときのデバッグでの表示は Range("A1")は「100」(セルの中身) Range("B1")は「0」(セルの中身) 変数1はRange("C1")がエラー表示なので「True」 すべての条件を満たしているのですが、 IF条件のところで止まってしまいます。 (IF条件のところの1行が黄色くハイライトになっている状態) 止まったデバッグの後に、F5を押して実行させると、 IF条件の続きから実行されて、test2が実行されて処理が終了します。 何で、IF文のところで一度止まってしまうのかわかりません。

  • IF = 0 Then 空欄と認識してくれない

    下記のように、$B4:$B28セルが全て空欄の際にマクロ1を実行しないようにしたいのですが、うまくいきません。 Sub マクロ() If Application.WorksheetFunction.CountA(Sheets("一覧").Range("$B4:$B28")) = 0 Then Exit Sub End If マクロ1 End Sub $B4:$B28には、実際は空欄ではなくて、=IF(Sheet2!A1="","",Sheet2!A1)の関数がずらーっと入っています。 表示上は空欄の時でも空欄とは認識されず、マクロ1が実行されてしまうのです。 マクロを実行したい時は、$B4:$B28のセルの一部、または全てのセルに4桁の数字が表示された時だけです。 $B4:$B28のIF関数を消して完全に空セルにすると正常に動作して、マクロ1が実行されずに済みます。 $B4:$B28にIF関数を入れたままで表示上空欄に見える状態でマクロ1を実行させないような条件出し として、0 Thenが不適切なのでしょうか。 マクロ実行有無の条件設定として、他に適切な方法があるのでしょうか。 Win7 64bit エクセル2010 宜しくお願いします。

  • if関数で、aまたはbまたはcという選択できますか

    if関数で、aまたはbまたはcという選択できますか。 ver num=1; if(x=1||x=3||x=5){ console.log("true"); } else{ console.log("folse"); }。 といった書き方はできませんか。 //ダイヤタイプの定義 const diagram = { WeekDay: 1, //平日ダイヤ Holiday: 2, //休日ダイヤ A: 3, //Aダイヤ B: 4, //Bダイヤ C: 5, //Cダイヤ } //ダイヤを判定する function dayJudge(year, month, date, day) { //フラグ(初期値:平日ダイヤ) var diagramFlag = diagram.WeekDay; //土日判定 if(day == 0 || day == 6) { diagramFlag = diagram.Holiday; } //特別な日 if((month == 10 && date == 12)||(month == 11 && date == 3)||(month == 11 && date == 24)) { diagramFlag = diagram.A; } else if(month == 5 && date == 25) { diagramFlag = diagram.B; } else if(month == 5 && date == 30) { diagramFlag = diagram.C; } return diagramFlag; } ができなくて困っています。

  • C言語 if文

    C言語のif文についての質問なのですが、ifを使い、条件Aの時は1のプログラムを実行、条件Bの時は2のプログラムを実行するようにしたとき、1と2のプログラム自体にもif文が使われています。その場合は、AとBの時のifと1と2に使われているifをどのように区別するのですか?(ちなみに1と2のif文については、それぞれ実行してみたところ動作可能でした。)説明が下手ですいません。初心者ですので、分かりやすく教えていただけると有難いです。

  • エクセルのif関数でセルごとに異なる確率計算

    エクセルのif関数で、以下のような条件を満たす数式はどのようにすればよいでしょうか? ・特定のセルに、1か0かのフラグを付けたい。 ・そのセルは複数有り、各セルごとに各々のフラグ発生確率が異なる。・・・(例)Aというセルは1フラグ発生確率50%(当然0フラグ50%)、Bというセルは1フラグ発生確率70%(同じく30%) よろしくお願い致します。

専門家に質問してみよう