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

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

ただいまの
回答率

91.25%

  • C#

    5036questions

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

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

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 112

rokoko

score 1

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

class Program
    {
        static void Main(string[] args)
        {
            int a = 10;
            int b = -10;
      
       // #1
            bool q = a++ < 11 | (++a < 13 && ++a < 11);
            Console.WriteLine("a= " + a);
       // #2
            a = 10;
            bool qq = a++ < 11 || (++a < 13 & ++a < 11);
            Console.WriteLine("a= " + a);
       // #3
            a = 10;
            bool qqq = (--a < 10 && --a < 11) | --a < 11;
            Console.WriteLine("a= " + a);
       // #4
            bool w = (++b > -11 && ++b > -9) || ++b > -11;
            Console.WriteLine("b= " + b);

        }
    }

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • t_masa

    2017/12/18 10:05

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

    キャンセル

回答 2

+1

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

checkベストアンサー

0

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

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

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

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

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/18 10: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ということですか?
    説明がヘタですみません。。。

    キャンセル

  • 2017/12/18 10:38

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

    キャンセル

  • 2017/12/18 11:00

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

    キャンセル

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

ただいまの回答率

91.25%

関連した質問

同じタグがついた質問を見る

  • C#

    5036questions

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