Почему были созданы логические операторы? - PullRequest
0 голосов
/ 28 сентября 2018

Почти все языки программирования имеют концепцию логического оператора. У меня вопрос, почему были созданы логические операторы.Я гуглил и нашел, что он создан для работы на основе условий, но я думаю, что это своего рода использование.

Мне интересен ответ, с какими проблемами сталкиваются люди без этого оператора.Пожалуйста, объясните с примером, если возможно.

1 Ответ

0 голосов
/ 28 сентября 2018

Меня интересует ответ: с какими проблемами сталкиваются люди без этого оператора.

Супер-многословные глубоко вложенные if() условия, особенно условия цикла.

while (a && b) {
    a = something;
    b = something_else;
}

написано без логических операторов становится:

while (a) {
    if (!b) break;   // or if(b){} else break;  if you want to avoid logical ! as well
    a = something;
    b = something_else;
}

Если вы не хотите цикл, вы хотите написать это?

if (c >= 'a') {
    if (c <= 'z') {
        stuff;
    }
}

Нет, изКонечно, нет, потому что это ужасно по сравнению с if (c >= 'a' && c <= 'z'), особенно если есть else, или это внутри другого вложения.Особенно, если ваши правила стиля кодирования требуют отступа в 8 пробелов для каждого уровня вложенности или { на отдельной строке, чтобы каждый уровень вложенности занимал еще больше места по вертикали.


Обратите внимание, что a&b равно , а не эквивалентно a&&b: даже за исключением оценки короткого замыкания .(Где b даже не оценивается, если a - ложь.) Например, 2 & 1 - ложь, потому что в их целочисленных битовых комбинациях не установлены одинаковые биты.

Короткое замыканиеОценка позволяет условиям цикла, таким как while(p && p->data != 0), проверять наличие указателя NULL, а затем условно делать что-то только с ненулевым значением.

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


Также обратите внимание, что это чисто высокий уровень проектирования языка.Аппаратное обеспечение процессора не имеет ничего общего с логическими операторами;обычно требуется несколько инструкций для реализации ! для целого числа (в целое число 0/1, а не при использовании в качестве условия if).

if (a && b) обычно компилируется в две инструкции теста / ветвления встроки. * * 1 044

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...