• ベストアンサー

c言語のand or演算子について教えてください。

c言語のand or演算子について教えてください。 if( A && B || c) と書いた場合、どういう風に読み取ればいいのでしょうか?

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

  • ベストアンサー
noname#29459
noname#29459
回答No.1

&&は、論理積 ||は、論理和  です。論理和、論理積の説明は、行いません。  こういう書き方をしているプログラマは、落第だとおもいますが、それは置いておいて。  演算子の有線順位は、&&が、||より強いです。結合性は、両方共、左から右です。  すなわち、  A && B || C は、 (A && B ) || C と、等価です。  Cでは、論理積、論理和は、省略評価する事になってます。すなわち、   A && B は、Aの結果がfalseなら、Bの結果がなんであろうと、全体の結果は、falseなので、Bの評価は行われません。 A || Bは、同様に、Aの結果が、trueなら、Bの結果いかんにかかわらず、全体の結果trueが確定されるので、Bは、評価されません。

No1No2
質問者

お礼

やはり優先順位があるんですね、cの派生プログラムのため細かい説明が見当たらなくて・・・初心者ゆえに困ってたところでした^^; 丁寧なご回答ありがとうございました。

関連するQ&A

  • C言語の&に関する質問

    C言語で if (x == 0.0) (いろいろな計算) return x < 0.0 && (n & 1) ? -ans : ans; というプログラムがあるのですが、 最後のreturnのところで x がゼロ以下で且つ、n &1の場合には -ansを返し、そうでない場合にはansを返すとあるのですが、 n&1というのはどういう意味なのでしょうか? C言語で&と言えば、 http://www9.plala.or.jp/sgwr-t/c/sec14.html のページにあるように、ビットごとの AND演算子ですが、 この場合にはどういう意味で使われているのでしょうか?

  • (Excel VBA)and,orについて

    andとorを同時に使用する場合について質問です。 Case1) if A=1 and B=1 or C=1 then これは「Aが1かつBが1であるか、又はCが1であれば」という意味か 「Aが1であり、かつBが1であるか又はCが1であれば」という意味なのか どちらでしょうか。 Case2) if A=1 or B=1 and C=1 then 次に、この場合はどちらの意味でしょうか。 よろしくお願いします。

  • エクセルのIF関数でORとANDの組み合わせ方

    エクセルのIF関数でORとANDの組み合わせ方を教えてください。 =IF(AND(C1>10,A1>B1),"S","") =IF(AND(C1>10,A1<B1),"L","") この2つの式をORで1つの式にするにはどのように組み合わせれば良いのでしょうか? よろしくお願いいたします。

  • C言語における複素数の四則演算について

    複素数の四則演算(a+biとc+diの四則演算)について、for文を用いて表示するプログラムについて、???の部分に何を入れたらよいかわからず、うまく実行することができません。和・差・積・商の計算種別を入れるみたいなのですが、何を入れたらいいのかわかりません。 #include <stdio.h> void fukuso(double a,double b,double c,double d,double *e,double *f,int keisan); int main(void) { double a=4, b=8, c=4, d=3, e, f; int i; for(i=1;i<5;i++){ fukuso(a,b,c,d,&e,&f,???); if(i==1) printf("和演算\n"); else if(i==2) printf("差演算\n"); else if(i==3) printf("積演算\n"); else printf("商演算\n"); printf("e=%f f=%f i\n",e,f); } return (0); } void fukuso(double a1,double b1,double a2,double b2,double *a3,double *b3,int keisan) { if(keisan==1){ *e=a+c; *f=a+c; } else if(keisan==2){ *e=a-c; *f=b-d; } else if(keisan==3){ *e=a*c-b*d; *f=a*d+c*b; } else{ *e=(a*c+b*d)/(c*c+d*d); *f=(-a*d+c*b)/(c*c+d*d); } }

  • "and" と "or" の使い方について

    等位接続詞の件で、疑問がなのですが、 たとえば、A,B,C and D が可能であれば、 A,B,C or D は「AかBかCかD」という意味で 使用可能でしょうか? また、"and"と"or"を下記のように共存させることは 可能でしょうか? A,B and C or D お分かりの方、ぜひよろしくお願いします。

  • SQL文について(ANDとORの論理演算について)

    下記の質問についてご教授お願い致します [設問] 国語と数学の試験を実施し、2教科の成績は氏名とともに、得点表に記録されている。 1教科は平均点以上で、残りの1教科は平均点未満の生徒氏名を表から抽出するSQLはどれか。 A:国語の点数が国語の平均点以上 B:数学の点数が数学の平均点以上 とするときに、SQL文は SELECT 生徒氏名 FROM 得点 WHERE (A OR B) AND NOT (A AND B) となります。 このときに、 WHERE (A OR B) AND NOT (A AND B) ここの論理演算を理解することが難しいです。 論理演算を分解すると A OR B 国語または数学が平均点以上であるケース NOT (A AND B) 国語と数学の両方が平均点以上であるケース となり、この両者をANDで取ると 1教科は平均点以上で、残りの1教科は平均点未満になることになります。 この論理演算でどうしてもこのような結果を引き出すことができません。 お手数ですがご教授お願いいたします。

  • C#でビット演算はできますか?

    C#2008で、以下のソースを動かして、OK 2が表示されるのを期待していたのですが、演算子&をintとbool型の演算子に適用できません。 となります。 何か良い方法はありますか? int a = 32 | 16; int b = 8; int c = 16; if (a & b != 0){ MessageBox.Swho("OK 1"); } if (a & c != 0){ MessageBox.Swho("OK 2"); }

  • 「~の内少なくとも一つ」で使うのはandかorか

    請求項で、「A,B,Cの内少なくとも一つ」という意味を英訳するとき、「... A, B, and C」とすべきか、「... A, B, or C」とすべきか、ということに関しての質問です。 質問1 例えば、合金などで「A, B, Cの内少なくとも一つを添加する」のような表現に出会うことがあります。このとき、「at least one of」を使うがマーカシュ式の表現とはしないものとした場合、andを使い「at least one of A, B, and C」とすべきか、あるいは、orを使い「at least A, B, or C」とするのか、どちらとすべきかアドバイスお願いします。 なお、「...の内少なくとも一つ」とは、「A, B, Cのどれか一つを添加」、あるいは「 AとB, BとC, AとCのような任意の二つの組み合わせのどれかを添加」、あるいは「 AとBとCの全てを添加」のうち、任意のどれかの添加方法を選択して添加することを意味するものとします。 質問2 若し、andもorもどちらも適用可能であるならば、andとorで適用の区分けがあるのか、また、請求範囲にどのような違いが出るのか、アドバイスお願いします。 質問3 若し、andもorも使わず、「at least one of A, B, C」としたときは、請求範囲の解釈はどのようになるのか、アドバイスお願いします。

  • JavaでC言語のポインタ演算風な使い方は

    Java初心者です。ずっとC言語をやっていました。 Javaにはポインタは存在せず(実際は参照渡しなのでポインタその ものなのですが)、ポインタに対する演算はありませんよね。 C言語で、 int buf[2*10]; int *dst = buf; for(i=0;i<10;i++){ dst[0]=a; dst[1]=b; dst += 2; } のようなソースをJavaで書こうとすると、 for(i=0;i<10;i++){ buf[i*2+0]=a; buf[i*2+1]=b; } しか思いつきません。 コンパイルして最適化されれば問題ないと思いますが、 なんか配列中の演算が演算量をとりそうで、気になっています。 もっと高速に処理されるような書き方はないものでしょうか? アドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • C言語による演算時の誤差について

    C言語初心者でどなたかご教授お願いします。 小数点の演算を行うわけではないのですが、 演算を行う数値が大きすぎるために、double型を使用して以下の計算を行うつもりです。 計算結果はlong型(小数点以下切り捨て)です。 double a,b,c; long x; x = (long)((a*b/c/100) 例)  x=(long)((189000*105000/100000)/100) 上記のような計算を行った際でも誤差が発生する可能性があるのでしょうか?

専門家に質問してみよう