• 締切済み

論理演算の問題です

secretdの回答

  • secretd
  • ベストアンサー率39% (50/126)
回答No.5

「かつ」「または」とか、「AND」「OR」とか言う言葉は論理演算でも集合でも用いるので、誤解していると思います。 論理演算と集合は違います。論理演算のときにはベン図なんて使いません。存在する、存在しない、というのは、集合の場合に「要素が」集合に入っているかどうかを考えるときに使うものです。ですから、論理演算のときに「存在しない」なんてことばを使っていること自体間違いです。 論理演算とは、ひとつの計算ルールの取り決めです。変数(AとかBとか)が真(TRUE)であるか、偽(FALSE)であるとき、全体の式が真であるか偽であるかを決めるためのものです。 A・B(AかつB)というのは、AもBも両方とも真(TRUE)の場合のみ、式全体を真とする、という「定義」です。ですから、質問の「片方が偽」であれば、A・Bが偽になるのも定義です。なぜ、というものではありません。 最後に。真、偽とか書いてると大変なので、真を1、偽を0で表現することがあります。だから、A・Bの結果は片方が偽であれば全体は偽で、数字で表せば0です。

関連するQ&A

  • エクセルの論理演算について

    A,Bが等しいかどうかの場合、A=B 真なら1 偽なら0 を返す AよりもBが大きいかどうか、 A<B 真なら1 偽なら0 を返す では質問ですが、A,Bが等しくないならば..はどのように記述するのでしょうか。A<>B, A><B, A.ne.B(←これはフォートラン) 今、必要なのは文字列の不一致なのですが。 また、1つ驚いたのですが、A>Bの比較の場合、A,Bのどちらかに数値としての大小比較できないもの(空白の文字、カンマなど)があると驚いたことに1を返すようです。論理演算の対象ではないと判断したら1を返すというのは確か基本なのかも知れませんが、常識からはかなり逸脱しています。ある行が無効となっており数値のところに全角のカンマみたいなものがあり、これを使って当然ゼロと評価すべきところを1と評価して集計してしまうということがありました。 エクセルは複雑に集計するような場合、相当習熟していないと大変大きな失敗を犯すことがあるようです。 以上、よろしくお願いします。

  • 論理演算の問題です

    添付した論理回路図を論理式にすると、 A・¬B+¬A・B になるようですが、どうも納得出来ません。 解説をおねがいします。 あと、 A・(¬A+B)=A・B の解説もお願いします。

  • 論理学の問題なのですが

    この問題のときかたを教えてください。 論理式が真か偽か、偶然的かを判定して真式にはA,偽式にはB、偶然式にはCを。 (1) ~pVq⊃q (2) ~(pVq)≡(p&q) (3) (p⊃q)V(~q⊃~p) (4) ~(p&q⊃(~p⊃q)) (5) (~pVq)&(q⊃r)⊃(p⊃r)

  • 論理演算子は・・・

    論理演算子&&(~と…を同時に満たすときだけ「真」)は、 例えば、(a<b && b<c && c<d) のように、「&&」を2回使う事はできるのでしょうか? また、(a<b || b<c && c<d)のような使い方は可能でしょうか。 教えていただきたいです。

  • 論理演算子について

    ◎1----------------------------- int main(void) { int a=10,b=20; while(1){ if(a= =12 && b= =25){ break; } ++a; ++b; } return 0; } -------------------------------- ◎2------------------------------------------------------- #include<stdio.h> #include<ctype.h> int main(void) { char ss[256]="10%%'%shin(no((100!w**a'16&'shi&%$#n~|=~de)&64"; int dt,i=0; printf("右の文字列には言葉が隠れています: "); printf("%s\n",ss); puts(""); printf("1を入力すると言葉が分かります: "); scanf("%d",&dt); puts(""); while(dt!=1 && ss[i] !='\0'){ if( !isalnum(ss[i]) ){ ss[i]=' '; } ++i; } printf("%s\n",ss); puts(""); return 0; } ------------------------------------------------------------ 以上2つのプログラムにおいて疑問があります。 まず◎1のプログラムで、aが12、bが25になるという2つの条件を満たしたら、プログラムを終了させようと思ったのですが、条件を満たしても、ずっとデクリメントし続け終了しません。 「if(a= =12 && b= =25)」の部分を「if(a= =12 || b= =25)」とすれば、aが12になった時点で終了しました。 ◎1では「if(a= =12 && b= =25)」という条件が何故適用されないかという疑問があります。 次に、◎2ではdtが1になり、配列ssに格納されている文字列が、'\0'になるという2つの条件を満たしたら終了させようとしたのですが、1を入力すると、「ss[i]!='\0'」の条件が偽にもかかわらず、while文が一度も実行されませんでした。 そこで、1以外を入力すると、while文は実行されましたが、dtの条件が真になる事はないのに、ちゃんと終了しました。 プログラム◎1、◎2について何故こうのようになってしまうのか、教えていただければ嬉しいです。

  • 論理演算について

    Cを勉強中の者です。論理演算についてよくわからいことがあります。 以下のソースコードを実行し結果が真なら0001、偽なら0000が出力されるプログラムを作りました。 #include <stdio.h> int main(void) { unsigned short a = 0x1234; unsigned short b = 0xfafc; unsigned short c = 0xcdef; unsigned short x, y; x = a && b; y = b && c; printf("x=%04x\n", x); printf("y=%04x\n", y); return 0; } 結果はx=0001, y=0001となります。y=0001はbとcの文字列がそれぞれfとcをを持っているので演算による結果は納得できますが、x=0001はaとbの文字列には共通するものがないのになぜx=0000ではないのでしょうか? また0xが頭に付く表現は16進数だと強調するためにあるのですか? 説明に不足があればまた足しますのでよろしくお願いします。

  • 「命題AとBには論理積の関係がある」←正しい言い方

    命題Aと命題Bについて次の4つの関係が成り立つ時、 A∧B→真 A∧¬B→偽 ¬A∧B→偽 ¬A∧¬B→偽 下記の言い方は合ってますか? 1.「AとBには論理積の関係がある」 2.「AとBの論理積は真であり、AとBの否定論理積は偽である」 より適切なものがあれば教えて下さい。

  • 論理の問題

    「a^2+b^2=0⇒a+b=0」は真 の理由が分かりません。 この命題が真である理由を教えてください。

  • 論理演算、どう解けば?

    論理演算を解く際に、図を描いたり(AとBが重なった絵)、1と0の真理値表を書いたりしますよね。 どちらを使って解くべきなのでしょうか?

  • 論理数学で条件節が理解できない

    命題Aが真のときに命題Bが偽ならばなんでA→Bが偽になるんですか? 理解しかねます わかりやすく説明しているサイトを教えてください。