Условное выражение C# И (&&) ИЛИ (||) приоритет

Можно использовать

for i in $(seq $END); do echo $i; done
69
задан Josiah Ruddell 28 July 2009 в 21:00
поделиться

6 ответов

Измените первое false на true. Я знаю, что это глупо иметь (правда || правда), но это доказывает вашу точку зрения.

bool result = true || true && false;   // --> true 
     result = (true || true) && false; // --> false
     result = true || (true && false); // --> true
107
ответ дан 24 November 2019 в 13:49
поделиться

Если вы действительно хотите напугать его, попробуйте:

bool result = True() | False() && False();

Console.WriteLine("-----");
Console.WriteLine(result);

static bool True()
{
    Console.WriteLine(true);
    return true;
}

static bool False()
{
    Console.WriteLine(false);
    return false;
}

Это напечатает:

True
False
False
-----
False

Изменить:

В ответ на комментарий :

В C # | - это логический оператор, который выполняет ту же логическую логику, что и || , но не замыкается. Также в C # оператор | имеет более высокий приоритет, чем оба || и && .

Распечатав значения, вы увидите, что если бы я использовал типичный оператор || , был бы напечатан только первый True , за которым следует результат выражения, которое также было бы Истинно .

Но из-за более высокого приоритета | , Истина | Сначала оценивается значение false (в результате получается true ) и , затем , в результате получается && ed с false для получения false .

Я не пытался показать порядок оценки,

10
ответ дан 24 November 2019 в 13:49
поделиться

Разве это не даст вам то, что вам нужно? Или, может быть, мне что-то не хватает ...

bool result = true || false && false;
6
ответ дан 24 November 2019 в 13:49
поделиться

Вы доказываете это не кодом, а логикой. И - это логическое умножение, а ИЛИ - логическое сложение. Какой из них имеет более высокий приоритет?

5
ответ дан 24 November 2019 в 13:49
поделиться

ложь || истина && истина

Вывод: истина

ложь && истина || true

Результат: true

1
ответ дан 24 November 2019 в 13:49
поделиться

Вы не можете просто показать конечный результат, когда ваши логические выражения сокращаются. Вот отрывок, который решает ваше дело.

Он полагается на реализацию & и | операторы, используемые && и ||, как указано в MSDN 7.11 Условные логические операторы

public static void Test()
{
    B t = new B(true);
    B f = new B(false);

    B result = f || t && f;

    Console.WriteLine("-----");
    Console.WriteLine(result);
}

public class B {
    bool val;
    public B(bool val) { this.val = val; }
    public static bool operator true(B b) { return b.val; }
    public static bool operator false(B b) { return !b.val; }
    public static B operator &(B lhs, B rhs) { 
        Console.WriteLine(lhs.ToString() + " & " + rhs.ToString());
        return new B(lhs.val & rhs.val); 
    }
    public static B operator |(B lhs, B rhs) { 
        Console.WriteLine(lhs.ToString() + " | " + rhs.ToString());
        return new B(lhs.val | rhs.val); 
    }
    public override string ToString() { 
        return val.ToString(); 
    }
}

Вывод должен показать, что && вычисляется первым перед ||.

True & False
False | False
-----
False

Для дополнительного развлечения попробуйте его с result = t || t && f и посмотрим, что происходит при коротком замыкании.

-5
ответ дан 24 November 2019 в 13:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: