質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

298閲覧

Logical Operatorがよくわかりません。

rokoko

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/12/18 00:55

Logical Operatorがよくわかりません。
説明してくださる方よろしくお願いします。

C#

1 2class Program 3 { 4 static void Main(string[] args) 5 { 6 int a = 10; 7 int b = -10; 8       9       // #1 10 bool q = a++ < 11 | (++a < 13 && ++a < 11); 11 Console.WriteLine("a= " + a); 12       // #2 13 a = 10; 14 bool qq = a++ < 11 || (++a < 13 & ++a < 11); 15 Console.WriteLine("a= " + a); 16       // #3 17 a = 10; 18 bool qqq = (--a < 10 && --a < 11) | --a < 11; 19 Console.WriteLine("a= " + a); 20       // #4 21 bool w = (++b > -11 && ++b > -9) || ++b > -11; 22 Console.WriteLine("b= " + b); 23 24 } 25 }

Outputは
a= 13
a= 11
a= 7
b= -8
となります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

diningyo

2017/12/18 01:05

どこが理解できないのかを詳細に記載したほうが答えやすいと思います。
guest

回答2

0

||&&短絡評価といって、||の左側がtrue相当の場合、あるいは&&の左側がfalse相当の場合、右側は評価されません。

1本の|&は「ビットごとの演算」という意味があることもあって、条件を問わず左右とも評価されます。

投稿2017/12/18 01:08

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

| はビット演算子(bit operator)の一つで || は論理演算子(logical operator)の一つです。

| 演算子は二つの数値のビットを立っている(1 である)方に合わせます。
たとえば十進数の 10 は二進数で表すと 1010 に、十進数数の 3 は二進数で表すと 0011 になりますが、これを | で演算すると 1011 になります。10 の立っているビットが一番目と三番目、3 の立っているビットが三番目と四番目なので、演算後は一番目と三番目と四番目が立ちます。

|| 演算子はビット演算ではなく論理演算をします。
論理演算というのは if 文の丸かっこの中で行われている演算です。
true || falsetrue
true || truetrue
false || falsefalse になります。
「または」と読むと意味がわかりやすいと思います。

if (1 == 2 || 1 ==1) の場合、1 == 2false1 == 1true になるので「1 が
2 である時、または 1 が 1 である時」と読め、結果は true になります。

論理演算は結果が出た時点で演算を終了します。
例えば if (1 == 1 || 1 == 2) の場合、左辺の 1 == 1 で結果が出ているのでそこで演算は終了し、1 == 2 は評価されません。
この例の場合は定数なので副作用はありませんが、右辺で他の変数やプロパティを変更する演算をしていた場合、右辺が評価されないことによって右辺の演算が実行されないことに気を付けなければなりません。

投稿2017/12/18 01:14

編集2017/12/18 01:15
Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rokoko

2017/12/18 01:34

分かりやすく説明していだたいてありがとうございます。 TrueとFalseで考えると理解出来るのですが数字が入ってくるといまいち理解出来ていません。 #1でいうと bool q = a++ < 11 | (++a < 13 && ++a < 11); Console.WriteLine("a= " + a); の時に最初のaに11が入り、 | の左はFalseになりますよね?そして次のaに12が入り、()内の&&で考えると左がTrueになり、次のaに13が入り、Falseになりますよね? ()内はTrue&&FalseになってFalseになりますよね?そしてTrue|FalseなのでFalseになり答えがa=13ということですか? 説明がヘタですみません。。。
Zuishin

2017/12/18 01:38

ビット演算ですから false 関係ありません。
Zuishin

2017/12/18 02:00

よく見たら右辺は論理演算ですね。 コンパイル通りますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問