Есть ли время, когда && (AndAlso) не имеет значения и (И)

<script>
    $("down-checkbox").click(function(){
        $("td .badge").each(function(){
            if($($this).text() == "LIVE"){
                $($this).hide();
            }
            else if($($this).text() == "DOWN"){
                $($this).show();
            }
        });
    });
</script>

Вы также можете использовать обратную логику, чтобы показать и скрыть основанный статус LIVE / DOWN

8
задан Jon Skeet 13 November 2008 в 06:27
поделиться

4 ответа

Как наблюдался, & поразрядная операция И. Необработанная двоичная математика является кажущейся, чтобы быть все меньше и меньше распространенной со временем с растущим числом разработчиков не действительно понимание поразрядной арифметики. Который может время от времени быть болью.

Однако существует много задач, которые лучше всего решены с таким, в особенности что-либо, что смотрит на данные как на флаги. & оператор на 100% необходим, и не идет никуда - он просто не используется так же часто как булево замыкание накоротко && оператор.

Например:

[Flags]
enum SomeEnum { // formatted for space...
    None = 0, Foo = 1, Bar = 2 // 4, 8, 16, 32, ...
}
static void Main() {
    SomeEnum value = GetFlags();
    bool hasFoo = (value & SomeEnum.Foo) != 0;
}
static SomeEnum GetFlags() { ... }
3
ответ дан 5 December 2019 в 08:26
поделиться

Если Вы используете сингл и (И) вторая часть выражения оценена. Это могло быть плохо, если вторая часть полагается на первую часть, являющуюся верным. Обычно всегда используйте &&, поскольку вторая часть не оценена, если первая часть является ложью.

Логически сингл и делает битовую операцию, как другие сказали, который все еще допустим для булева сравнения/оценки. Действительно единственное время, сингл и (или |) должен использоваться (или булева оценка) - то, если вторая оценка должна всегда работать (если это - вызов функции / модификатор). Это - плохая практика через и вероятно почему книга не упоминает это.

Единственный и полезны с перечислениями флага и битовыми масками.

Следующее выдаст исключение obj, является пустым:

bool b = obj != null & obj.IsActive

Но это будет работать:

bool b = obj != null && obj.IsActive

Это плохо:

bool b = obj.IsActive && obj.SetActive(false);
bool b = obj.IsActive & obj.SetActive(false);

И оператор устанавливается.

7
ответ дан 5 December 2019 в 08:26
поделиться

Всегда используйте && при выполнении истинного/ложного логического теста. Сингл и выполняет поразрядное 'и'. Это делает работу как логический тест в некоторых случаях, но это, как гарантируют, не будет работать на все логические случаи. Наиболее популярный способ использования сингла и при применении битовой маски.

Примеры (&&):

true && true == true

Пример (и):

00101001 & 00100001 = 00100001
9
ответ дан 5 December 2019 в 08:26
поделиться

И побитовый оператор, в то время как && является операцией И. Две совершенно других операции.

int a = 1;
int b = 2;
assert (a & b == 0) 
assert (a && b == true) 

Править: Ooops... этот пример не работает в C#. Это должно в C++. Надо надеяться, это иллюстрирует намерение и различие между этими двумя операторами.

1
ответ дан 5 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

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