論理演算子&& 論理式かつ論理式のような組み合わせも論理式となり0か1の論理値をもちます 

よし、再び再開します。


論理演算子&&のページを開く。



いままでみてこられましたように


==や>=のような関係演算子をつかって


作られた論理式は0か1のあたいをもちます。


関係演算子==によって作られる論理式は


左辺の項と右辺の項が等しければ真の値1を持ち

左辺の項と右辺の項が等しくなければ偽の値0をもちます。


たとえば

5==5は

左辺の5と右辺の5は等しいということを述べている論理式となっています。

この状態は論理的に正しいので


論理式5==5は真の値1をもちます。


5==8は

左辺の5と右辺の8は等しいということを述べている論理式となっています。

この状態は論理的に正しくないので


論理式5==5は偽の値0をもちます。



論理式 5==5ならば


次のプログラムをコンパイルしてみていただけても


おわかりになられますように


#include <stdio.h>


int main(void){


printf("%d\n",5==5);


return 0;

}


コンパイル結果


1


論理式

5==5は1の値をもっています・・・


成程・・・ですの・・・


窓の外をみやる



    🐤~~~  

       🐤~~~~~


あっ小鳥が飛んでる。


ちゅん、ちゅ、ちゅん


ちゅん、ちゅ、ちゅん


ではでは


論理式

5==5に似た


5=5はいかなる値をもっているのでしょう?


#include <stdio.h>


int main(void){


printf("%d\n",5=5);


return 0;

}


コンパイル結果

(EAZY IDECの場合)


ファイル「C:/Users/solarplexus/AppData/Local/EasyIDEC/project/wwwwwww/main.c」の

「5行目」で記述エラーを発見しました。

「lvalue」を付け忘れています。



ビルド結果(Visual studioの場合)


エラー (アクティブ) E0137 式は変更可能な左辺値である必要があります

エラー C2106 '=': 左のオペランドが、左辺値になっていません。 5




???この5=5の書き方はさすがにまずかった・・かな・・・


5=5の=は関係演算子ではなく代入演算子なので


関係演算子==であらわされた


5==5の論理式のように


5=5は論理式とはならず


数値1の値をもたないのです。


🐤

ちゅん、ちゅ、ちゅん


ちゅん、ちゅ、ちゅん 🐤


窓から光が室内の白いテーブルに差し込み


静謐な佇まいをみせている。。


さらに文書を読み進めるアレサ


なに、なに・・・

論理演算子&&、||、! ・・・


論理演算子&&は論理式と論理式をむすびつけ


1>5&&12>6


のような新しい論理式を生成します。



窓から爽やかな風が吹き込んでくる。



ここで&&は日本語で、かつ、という意味であり


A&&Bという論理式はAかつBである、という状態をあらわしています。


ここで


A&&Bという論理式はAかつBである、という状態をあらわしています。

とはどのような状態なのか



例をあげて ご説明いたします


論理式は0と1のどちらかの値のみをもちます


論理式

5>1は 5は1より大きいということを述べていますが


論理的に真ですの。


ですから


論理式

5>1は真の値1をもちます。


論理式

1>5は 1は5より大きいということを述べていますが


論理的に偽ですの。


ですから


論理式

5>1は偽の値0をもちます。


このように


論理式では


論理式が論理的💖💖💖に正しいか正しくないかによって


0と1の値のどちらかの値をもつことになります。


では関係演算子&&をもちいて作製された論理式


5>1&&10>18はどのような状態を表している論理式なのでしょうか?


5>1&&10>18は


5は1より大きい


かつ


10は18より大きい


ということをのべている論理式となっています。


つまり


5は1より大きい


かつ


10は18より大きい


が同時に成立していることを表している論理式となっています。


論理式&&が使用された論理式は


左辺と右辺が論理的に正しいときのみ


論理値1を持ち


左辺と右辺のどちらかが正しくない場合は


論理値0を持つよう設定されています。



5>1&&10>18の左辺の


5は1より大きい



論理的に正しいのですが


右辺の


10は18より大きい



論理的に正しくありません。


よって


論理式5>1&&10>18は偽の値0をもちます。


次に


5>1&&10>8は


5は1より大きい


かつ


10は8より大きい


ということを述べている論理式についてみていきましょう。


5>1&&10>8の左辺


は論理的に正しいかというと


左辺の

論理式

5>1

5は1より大きい



論理的に正しく


右辺の

論理式

10>8

10は8より大きい



論理的に正しいですの。


左辺と右辺の両方の論理式が1の値をもちます。


ですので


論理式

5>1&&10>8は真の値1をもちます。


ところで


次のように考えられる方もおられると思いますの。





論理式

1>5&&12>6


が1の値をもつか

0の値をもつかを


考察するとします。



1>5は論理的に偽であり数値0の値をもち

12>6は論理的に真となって数値1の値をもっています。


よって

1>5&&12>6は


0&&1


つまり


数値0かつ数値1であるという状態をあらわす論理式です。


数値0かつ数値1であるという状態は


どういう状態なのか?


数値0かつ数値1であるという状態は


0


1


0


01



と考えられる方もおられるかもしれません。



0&&1という論理式は


数値0かつ数値1であるという状態ではなく


0や1も論理式とみなされるので


論理値0をもつ論理式かつ論理値1を持つ論理式であるという状態をあらわしています。



0&&1という論理式は


数値0かつ数値1である状態を表している数式ではありません。


0&&1という論理式のままで考えるとむずかしいのですが



先ほどの例のような


1>5&&12>6という論理式で考えると簡単ですの。


1>5&&12>6という論理式は


1は5より大きいという論理式



12は6より大きいという論理式が


論理演算子&&により結び付けられた論理式となっています。


そして


ここが重要なのですが

左辺の

1>5の論理式は論理的に偽であり数値0の値をもち

右辺の

12>6の論理式は論理的に真となって数値1の値をもっています。


そのとき


1>5&&12>6という論理式は0という値をもつか


1という値をもつか


1>5&&12>6という論理式は論理的に正しいか正しくないか?



自分で考えて導き出すことはできません。



&&使



1



0


ですので


1>5&&12>6という論理式は0という値をもつ


ということが導き出すことができます。



このように


1は5より大きいと述べている論理式

1>5


に与えられる数値0



12は6より大きいと述べている論理式

12>6


に与えられる数値1



論理式

1>5&&12>6にあたえられる数値1



論理値とよばれます。



0&&1


という論理式のなかの


0や1は普通の数値ではなく


その論理式が述べていることが正しいか正しくないかを


あらわす


論理値なのです。



ですので


論理式

0&&1



数値0かつ数値1であるということを述べている


論理式ではありません。


0&&1



論理的に正しくないという論理式と



論理的に正しいという論理式が


&&によって


結び付けられている論理式なのです。


&&が使用されている論理式の左辺と右辺が論理的に正しい場合のみ


その論理式は論理値1をもちます。


左辺と右辺のどちらか1方でも論理的に正しくない場合は


その論理式は論理値0をもちます。


よって

論理式

0&&1

論理値0をもちます。



ちゅん、ちゅん(^^)


論理演算子&&による


論理式&&論理式のくみあわせによって新たにつくられる論理式は


論理式 0&&0 論理値0を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式

論理式 0&&1 論理値0を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式

論理式 1&&0 論理値1を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式

論理式 1&&1 論理値1を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式

これらの4通りの論理式しかありません。


そして


        🍊論理式は論理値0か1のいずれかの値をもつので🍊


論理式 0&&0 論理値0を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式

論理式 0&&1 論理値0を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式

論理式 1&&0 論理値1を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式

論理式 1&&1 論理値1を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式


も0か1のいずれかの論理値をもつことになります。


そのことを確かめるプログラムを構成して実行してみると


#include <stdio.h>


int main(void) {


printf("%d\n", 0 && 0);

printf("%d\n", 0 && 1);

printf("%d\n", 1 && 0);

printf("%d\n", 1 && 1);


return 0;

}


EAZY IDECの場合

コンパイル結果

0

0

0

1


Visual studioの場合

ビルド実行結果

0

0

0

1


論理式 0&&0は


論理値0を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式


をあらわしており


最初からの設定により


論理値0の値をもちます。



論理式 0&&1は


論理値0を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式


をあらわしており


論理値0であらわすか?

論理値1であらわすか?


ということになりますが


さきほどみてきたように


0&&1は論理値0の値をもつよう設定されているので


論理値0の値をもつことになります。


論理式 1&&0は


論理値1を持つ論理式と論理値0を持つ論理式が&&によって結び付けられた論理式をあらわしており


論理値0であらわすか?

論理値1であらわすか?


ということになりますが


1&&0は論理値0の値を持つよう設定されているので


1&&0は論理値0の値をもちますね。



論理式 1&&1は


論理値1を持つ論理式と論理値1を持つ論理式が&&によって結び付けられた論理式をあらわしており



論理的にただしい論理式



論理的にただしい論理式



&&によって


結び付けられている論理式です。


このときも最初からの設定により


論理値1の値をもちます。


はい、なるほど・・・



このように


数学の集合ならa>1かつa>5なら


結果はa>5となりますが


C言語の


論理式かつ論理式においては


結果は


       🍅0か1のいずれかの論理値をもつんですの・・・🍅



ちゅちゅん、ちゅちゅん、


ああっ鳥が鳴いている・・・

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます