論理演算子について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Bobchanpon

論理演算子について

#1

投稿記事 by Bobchanpon » 5年前

つい最近C言語を勉強し始めたのですが、分からないことがあったので投稿させていただきました。

コード:

#include<stdio.h>

main()
{
int b=1
printf("%d\n",!((b==0)||(b==1)));
}
上記のものなら 0(偽) と正しく出るのですが...。

コード:

#include<stdio.h>

main()
{
int b=1
printf("%d\n",!(b==0)|| !(b==1));
}
これだと何故か 1(真) と出てきます。

コード:

#include<stdio.h>

main()
{
int b=1
printf("%d\n",!(b==0)&& !(b==1));
}
||を&&に変えると 0(偽) と正しく出てきます。
とくに意味はなく、これはこうしなきゃいけないといったルールみたいなものなのでしょうか?
分からなくて困っているので教えていただけると助かります...T_T

コンパイルは paiza.IO というオンラインコンパイラを使用しています。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 論理演算子について

#2

投稿記事 by YuO » 5年前

オフトピック
3行目の戻り値の型intと,5行目の末尾にセミコロンが足りませんが,そこをおぎなった上で以下を書いています。
また,Cの話なので論理値は1と0で表すべきですが,説明上true(真)とfalse(偽)で表しています。
論理演算子の真偽値
  • true || true => true
  • true || false => true
  • false || true => true
  • false || false => false
  • true && true => true
  • true && false => false
  • false && true => false
  • fales && false => false
  • !true => false
  • !false => true
を元に,ちゃんと計算していけばよいです。

まず,演算時の変数の値から,
  • b == 0 => false : 偽
  • b == 1 => true : 真
はわかっていると思います。

最初の式は,

コード:

!((b == 0) || (b == 1))
です。

コード:

!((false) || (true))
!(false || true)
!(true)
!true
false
ですから,結果は偽になり,0と出力されます。

2番目の式は,

コード:

!(b == 0) || !(b == 1)
です。

コード:

!(false) || !(true)
!false || !true
true || false
true
ですから,結果は真となり,1と出力されます。

3番目の式は,

コード:

!(b == 0) && !(b == 1)
です。

コード:

!(false) && !(true)
!false && !true
true && false
false
ですから,結果は偽になり,0と出力されます。

最初の式と3番目の式は,ド・モルガンの法則で関係付けられます。
  • 式 (!(A && B)) と 式 (!A || !B) は等しい
  • 式 (!(A || B)) と 式 (!A && !B) は等しい
今回の例だと,Aが(b == 0)でBが(b == 1)になります。

アバター
Bobchanpon
記事: 3
登録日時: 5年前

Re: 論理演算子について

#3

投稿記事 by Bobchanpon » 5年前

論理演算子の真偽値なんてものがあるんですね!おかげで理解することができました!
丁寧に説明していただきありがとうございました!!

返信

“C言語何でも質問掲示板” へ戻る