<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>論理演算 on Miura Computer Club</title>
    <link>/tags/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97/</link>
    <description>Recent content in 論理演算 on Miura Computer Club</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-JP</language>
    <lastBuildDate>Sun, 02 Aug 2026 10:00:00 +0900</lastBuildDate><atom:link href="/tags/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>レッスン112</title>
      <link>/lessons/lesson112/</link>
      <pubDate>Sun, 02 Aug 2026 10:00:00 +0900</pubDate>
      
      <guid>/lessons/lesson112/</guid>
      <description>論理演算入門 「論理演算」とは「命題」を対象とした演算です。 「命題」とは、真（正しいこと、True）か偽（間違っていること、False）かを判断できる文や式のことです。
例えば「5は3より大きい」（正しい＝真）や「3は5より大きい」（間違っている＝偽）などが命題です。
論理演算の種類 よく使われる論理演算の種類は、以下の4つです。
and（かつ、論理積） or（または、論理和） not（でない、否定） xor（排他的にまたは、排他的論理和） 各演算の結果 A and B 「AかつB」という意味なので、AとBの両方が真(True)のとき真(True)となり、その他の場合は偽(False)になります。
A or B 「AまたはB」という意味なので、AとBのいずれかが真(True)のときに（両方が真(True)でもよい）真(True)となり、その他の場合（両方が偽(False)の場合）は偽(False)となります。
not A 「Aでない」という意味なので、Aが真(True)なら偽(False)になり、Aが偽(False)なら真(True)になります。
A xor B 「A排他的にまたはB」という意味です。 ここで「排他的（他を排除する）」というのはAかBの一方だけという意味なので、AとBのいずれか一方だけが真(True)のときだけ真(True)となり、その他の場合（両方とも真(True)か両方とも偽(False)の場合）は偽(False)になります。
以下に論理式で、and、or、not、xorの演算結果を示します。 ここでは、AやBという変数ではなく、真(True)および偽(False)という値で論理式と演算結果を示しています。
and（論理積、かつ）
偽(False) and 偽(False) = 偽(False)
偽(False) and 真(True) = 偽(False)
真(True) and 偽(False) = 偽(False)
真(True) and 真(True) = 真(True)
or（論理和、または）
偽(False) or 偽(False) = 偽(False)
偽(False) or 真(True) = 真(True)
真(True) or 偽(False) = 真(True)
真(True) and 真(True) = 真(True)</description>
      <content>&lt;h1 id=&#34;論理演算入門&#34;&gt;論理演算入門&lt;/h1&gt;
&lt;p&gt;「論理演算」とは「命題」を対象とした演算です。
「命題」とは、真（正しいこと、True）か偽（間違っていること、False）かを判断できる文や式のことです。&lt;/p&gt;
&lt;p&gt;例えば「5は3より大きい」（正しい＝真）や「3は5より大きい」（間違っている＝偽）などが命題です。&lt;/p&gt;
&lt;h2 id=&#34;論理演算の種類&#34;&gt;論理演算の種類&lt;/h2&gt;
&lt;p&gt;よく使われる論理演算の種類は、以下の4つです。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;and（かつ、論理積）&lt;/li&gt;
&lt;li&gt;or（または、論理和）&lt;/li&gt;
&lt;li&gt;not（でない、否定）&lt;/li&gt;
&lt;li&gt;xor（排他的にまたは、排他的論理和）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;各演算の結果&#34;&gt;各演算の結果&lt;/h2&gt;
&lt;h3 id=&#34;a-and-b&#34;&gt;A and B&lt;/h3&gt;
&lt;p&gt;「AかつB」という意味なので、AとBの両方が真(True)のとき真(True)となり、その他の場合は偽(False)になります。&lt;/p&gt;
&lt;h3 id=&#34;a-or-b&#34;&gt;A or B&lt;/h3&gt;
&lt;p&gt;「AまたはB」という意味なので、AとBのいずれかが真(True)のときに（両方が真(True)でもよい）真(True)となり、その他の場合（両方が偽(False)の場合）は偽(False)となります。&lt;/p&gt;
&lt;h3 id=&#34;not-a&#34;&gt;not A&lt;/h3&gt;
&lt;p&gt;「Aでない」という意味なので、Aが真(True)なら偽(False)になり、Aが偽(False)なら真(True)になります。&lt;/p&gt;
&lt;h3 id=&#34;a-xor-b&#34;&gt;A xor B&lt;/h3&gt;
&lt;p&gt;「A排他的にまたはB」という意味です。
ここで「排他的（他を排除する）」というのはAかBの一方だけという意味なので、AとBのいずれか一方だけが真(True)のときだけ真(True)となり、その他の場合（両方とも真(True)か両方とも偽(False)の場合）は偽(False)になります。&lt;/p&gt;
&lt;p&gt;以下に論理式で、and、or、not、xorの演算結果を示します。
ここでは、AやBという変数ではなく、真(True)および偽(False)という値で論理式と演算結果を示しています。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;and（論理積、かつ）&lt;/p&gt;
&lt;p&gt;偽(False) and 偽(False) = 偽(False)&lt;/p&gt;
&lt;p&gt;偽(False) and 真(True) = 偽(False)&lt;/p&gt;
&lt;p&gt;真(True) and 偽(False) = 偽(False)&lt;/p&gt;
&lt;p&gt;真(True) and 真(True) = 真(True)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;or（論理和、または）&lt;/p&gt;
&lt;p&gt;偽(False) or 偽(False) = 偽(False)&lt;/p&gt;
&lt;p&gt;偽(False) or 真(True) = 真(True)&lt;/p&gt;
&lt;p&gt;真(True) or 偽(False) = 真(True)&lt;/p&gt;
&lt;p&gt;真(True) and 真(True) = 真(True)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;not（否定、でない）&lt;/p&gt;
&lt;p&gt;not 偽(False) = 真(True)&lt;/p&gt;
&lt;p&gt;not 真(True) = 偽(False)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;xor（排他的論理和、排他的にまたは）&lt;/p&gt;
&lt;p&gt;偽(False) xor 偽(False) = 偽(False)&lt;/p&gt;
&lt;p&gt;偽(False) xor 真(True) = 真(True)&lt;/p&gt;
&lt;p&gt;真(True) xor 偽(False) = 真(True)&lt;/p&gt;
&lt;p&gt;真(True) xor 真(True) = 偽(False)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;論理演算は、プログラムの分岐処理（&lt;code&gt;if&lt;/code&gt;や&lt;code&gt;while&lt;/code&gt;など）で、いくつかの条件（条件は命題の一種です）を結びつけたり、条件を否定したりするときに使われます。&lt;/p&gt;
&lt;p&gt;真(True)と偽(False)を&lt;code&gt;1&lt;/code&gt;と&lt;code&gt;0&lt;/code&gt;の数値に対応させると、論理演算は2進数の演算であるとみなせます。
例えば、真(True) and 真(True)は、&lt;code&gt;1 and 1 = 1&lt;/code&gt;という2進数の演算とみなせます。
コンピュータの内部では、電気信号で表された2進数を演算する仕組みとして、論理演算が使われています。&lt;/p&gt;
&lt;h2 id=&#34;ドモルガンの法則&#34;&gt;ド・モルガンの法則&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;ド・モルガンの法則&lt;/b&gt;は、論理式を変形する法則です。
以下にド・モルガンの法則を示します。&lt;/p&gt;
&lt;h3 id=&#34;法則１&#34;&gt;法則１&lt;/h3&gt;
&lt;p&gt;not (A and B) = (not A) or (not B)&lt;/p&gt;
&lt;p&gt;「A and Bの結果をnotした論理式は、not Aとnot Bをorした論理式と等しい」&lt;/p&gt;
&lt;h3 id=&#34;法則２&#34;&gt;法則２&lt;/h3&gt;
&lt;p&gt;not (A or B) = (not A) and (not B)&lt;/p&gt;
&lt;p&gt;「A or Bの結果をnotした論理式は、not Aとnot Bをandした論理式と等しい」&lt;/p&gt;
&lt;p&gt;法則１は「（Aが正しい、かつ、Bが正しい）でない　＝　Aが正しくない、または、Bが正しくない」。
法則２は「（Aが正しい、または、Bが正しい）でない　＝　Aが正しくない、かつ、Bが正しくない」ということで理解できると思います。&lt;/p&gt;
&lt;h2 id=&#34;問題１&#34;&gt;問題１&lt;/h2&gt;
&lt;p&gt;P、Q、Rは真(True)か偽(False)の値を持つ命題です。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;P = 真(True)&lt;/li&gt;
&lt;li&gt;(not P) or Q = 真(True)&lt;/li&gt;
&lt;li&gt;(not Q) or R = 真(True)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;のとき、QとRはそれぞれ真(True)、偽(False)のどちらでしょうか？&lt;/p&gt;
&lt;details&gt;&lt;summary&gt;答え&lt;/summary&gt;
&lt;p&gt;まず、P = 真(True)　なので　(not P) = 偽(False)です。
次に、(not P) or Q = 真(True)　なので 偽(False) or Q = 真(True)です。
したがって、Q = 真(True)になります。&lt;/p&gt;
&lt;p&gt;次に、Q = 真(True) とわかったので、(not Q) = 偽(False)です。
次に、(not Q) or R = 真(True)　なので 偽(False) or R = 真(True)です。
したがって、R= 真(True)になります。&lt;/p&gt;
&lt;p&gt;以上のことから、RとQはどちらも真(True)になります。&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id=&#34;問題２&#34;&gt;問題２&lt;/h2&gt;
&lt;p&gt;この問題はド・モルガンの法則を使って複雑な論理式をシンプルに変形する問題です。&lt;/p&gt;
&lt;p&gt;論理式&lt;code&gt;not (((not A) or B) and (A or (not C)))&lt;/code&gt;と等しいのはどの論理式でしょうか。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;(A and (not B)) or ((not A) and C)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;((not A) and B) or (A and (not C))&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(A or (not B)) and ((not A) or C)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;((not A) or B) and (A or (not C))&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
 &lt;details&gt;&lt;summary&gt;答え&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;not (((not A) or B) and (A or (not C)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;not (X and Y)&lt;/code&gt;の形式なので、&lt;code&gt;(not X) or (not Y)&lt;/code&gt;に変形する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(not((not A) or B)) or (not(A or (not C)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;式の前半は&lt;code&gt;not (X or Y)&lt;/code&gt;の形式なので&lt;code&gt;(not X) and (not Y)&lt;/code&gt;に 変形する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(not(not(A)) and (not B)) or (not(A or (not C)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;not(not(A)) = A&lt;/code&gt;なので&lt;code&gt;A&lt;/code&gt;に変形する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(A and (not B)) or (not(A or (not C)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;式の後半も&lt;code&gt;not (X or Y)&lt;/code&gt;の形式なので&lt;code&gt;(not X) and (not Y)&lt;/code&gt;に 変形する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(A and (not B)) or (not(A) and not(not(C)))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;not(not(C)) = C&lt;/code&gt;なので&lt;code&gt;C&lt;/code&gt;に変形する&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;(A and (not B)) or (not(A) and C)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;正解は1となる&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;p&gt;　&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
