• ベストアンサー

【C言語】if文の条件式について

基本的な質問で申し訳ございません。 C言語のif文にて、以下の条件式がよくわかりません。 if(a & PAD_INPUT_UP){ b = b-4; } 「&」はどのような意味になるのでしょうか??

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

  • ベストアンサー
回答No.2

&は各ビットの論理積を計算します。 1ビットで考えると、1&1=1 1&0=0 0&1=0 0&0=0 です。 あるビットが1か0かを判定するのによく使います。 たとえば、PAD_INPUT_UP=00000100 で、 (1)aがxxxxx0xx ならa&PAD_INPUT_UP=00000000 (2)aがxxxxx1xx ならa&PAD_INPUT_UP=00000100 になります。(xは0でも1でもいいという意味) if文は判定式の中が0以外のときにその後を実行するので、下から3ビット目が1の時つまり(2)の時だけだけifの中を実行するわけです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tanma3
  • ベストアンサー率58% (14/24)
回答No.1

マスクっていったらいいでしょうか。 たとえば、 int b; int a=5; #define PAD_INPUT_UP 4 であった場合, b = (a & PAD_INPUT_UP);の値は? 上記式と同じことです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語 if文

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

  • C言語の条件式での~(チルド)について

    C言語に関しての質問です。 以下のようなプログラムでは変数bをキャストした場合と しない場合で条件式の判定結果が違います。 変数bはもともとunsiged char型なのでキャストは不要だと 思ったのですが、なぜ結果が違うのでしょうか? (条件式if(a != ~b)の判定結果も偽になることを期待していました。) unsigned char a; unsigned char b; a = ~0x98; b = 0x98; if(a != ~b) { printf("こっちは入る"); } if(a != (unsigned char)(~b)) { printf("こっちは入らない"); }

  • C言語におけるif文の評価順

    たとえば以下のようなif文で、A B C が評価される順番は 言語の規約上、明確になっているのでしょうか? if ( A && B && C ) { } また例えば A, B, C の順番に評価されるとして、B が FALSE の場合は C を評価する必要はありませんが、 この場合、Cは評価されないことは言語規約上、明確に なっているのでしょうか? 手元のコンパイラで試した結果では 評価順は A -> B -> C で B で FALSE を返すようにしたら C は実行されませんでした。 ただ、これが実装依存か、言語の標準仕様かという点が 気になっています。

  • 表計算のifの条件式について

    LibreOfficeの表計算のifの条件式について わからない点があります。 A1からA9までテストの点(満点100)が入力されています。 問題は 【59以下なら『C』、79以下なら『B』、100以下なら『A』とする。】 とあります。 なので(1)~(4)の導けそうな日本語文を考え その条件で入力しましたが、 (4)しか正しく導けませんでした。 (1)~(3)のダメな点は一体どこなんでしょうか? 何しろ初心者なもので、あまり専門用語を使わず 噛み砕いてご回答してくださるとよりありがたいです。 是非、よろしくお願いします。 (1)、100以下なら『A』、80未満を『B』、60未満を『C』とする。  =if(a1<=100,"A",if(a1<80,"B",if(a1<60,"C","")))  →全部がAになる (2)、100以下なら『A』、79以下を『B』、59以下を『C』とする。  =if(a1<=100,"A",if(a1<=79,"B",if(a1<=59,"C","")))  →全部がAになる (3)、60未満を『C』、80未満を『B』、それ以外を『A』とする。  =if(a1<60,"C",if(a1<80,"B","A"))  →全部がCになる (4)、60未満を『C』、80未満を『B』、100以下を『A』とする。  =if(a1<60,"C",if(a1<80,"B",if(a1<=100,"A","")))  →ちゃんとなる。

  • c言語でif文の処理について

    お世話になります。 C言語を勉強中なのですが AとBが一緒でなおかつCとDが一緒ならば というif文を作りたいのですがどのように記載すればいいのでしょうか? よろしくお願いいたします。

  • if文の条件式について

    iPhone OS 3.0、Xcode 3.1.3という環境でobjective-cをベースとしてiPhone向けアプリケーションを作る研究をしています。 どちらかというとC言語の質問になりますが、if文で使う条件式にNSString型で宣言した文字列を使うにはどうすればいでしょうか? NSString *startArea = [[NSString alloc] initWithFormat:@"pt.x > 224 && pt.y < 100"]; というコードでstartAreaに代入されたpt.x > 224 && pt.y < 100という文字列をif文の条件式として使えればと思ってます。 ちなみに、、、 if( startArea ){ 実行したい命令 } という記述をしたところ、ビルドエラーは発生しませんでしたが条件が無視されてしまいました。 他にコードの間違いがあるかもしれませんが、まずはこの内容で判断をお願いします。

  • perl のif文(条件式)内に代入式は使えない?

    例えば、$a =1 という代入式を、if 文の条件式として、( $a = 1){ } とするとエラーが出ますが、代入式はif文の条件式として使えないのですか?

    • ベストアンサー
    • Perl
  • ifの条件式 Andを使用するものについて

    phpで、 $a="あいうえお"; $b="かきくけこ"; $c="かきくけこ"; と変数を三つ宣言しました。 上の変数三つを利用して、以下条件のif文を作りたいと思いました。  条件:$a変数 と $b変数が異なり、かつ $b変数 と $c変数の内容が同じとき「処理A」を実行させる。 ○作成したif文 if(($a <> $b) && ($b == $c)){  処理A } と記述したのですが、 ifブロック処理Aが実行されません。 なぜなのでしょうか…。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • if文について

    最近、C言語プログラムから、離れていて、久しぶりにここを覗いたのですが、 こんな質問を見ました。 質問 C言語初心者だが、学習用に良いサイトはないか? 最初の回答の方は、ある初心者用と思われるサイトを、紹介してらっしゃいました。 それに対して、他の回答者の方々は、そのサイトの一分を引用して、コンパイルできないし、間違っていると指摘されました。それは以下のようなものでした。 if(条件式) 文1; else 文2; その代わりに掲載されているのが次のようなものでした。 if(条件)条件が真のときに実行する1文; else 条件が偽のときに実行する1文; 私には、最初の回答がなぜ間違っているのか、何故コンパイルできないのか、判りません。何方か詳しく教えていただければ、嬉しいです。よろしくお願いします。

  • エクセルのIF文

    基本的な質問ですが、 エクセルのIF文で下記の条件式を教えてください。 A1が1ならばB1には普通と表示、2ならば当座、0ならば空白というIF文を作りたいのですが、どのように作れば良いのでしょうか? よろしくお願い致します。

このQ&Aのポイント
  • 相手は知り合いのマッサージ師で、オプション代を要求されましたが、後日金銭を再度要求されました。
  • 相手は「入れたいんだったらゴムつけてね」と言ってきましたが、具体的な本番についての了解はありませんでした。
  • 現在、相手から慰謝料の要求があり、対処方法について相談しています。
回答を見る

専門家に質問してみよう