Приведение типов, оператор присваивания, функции alert, prompt, confirm

Использование логических операторов для управления потоком

Для управления результатом и потоками данных программы можно использовать условные операторы (condition) с выражениями (clause).

Условные операторы оценивают значение как истинное или ложное.

Выражение – это блок кода, который идёт после условного оператора и определяет результат программы.

Ниже приведён блок кода, который показывает, как объединить условные операторы для управления потоком программы Python.

Эта программа оценивает результат каждого студента и определяет, сдал он экзамен или нет. К примеру, если студент набрал 83, первое условие будет иметь значение True, и программа выведет на экран строку:

Если же студент набрал 59 баллов, первое условие будет ложно, потому программа выдаст:

8 ответов

9

Лучший ответ

И выигрывает над OR.

Итак, это будет

См. Приоритет операторов и ассоциативность.

20 апр. 2011, в 13:36
Поделиться

6

В логической логике «not» () оценивается до «и» (), а «и» оценивается до «или» (). Используя двойные () и двойные (), эти операторы будут иметь короткое замыкание, которое не влияет на логический результат, но при этом не требует оценки терминов с правой стороны.

Таким образом,

оценивается как , который вычисляет

и

оценивается как , который оценивается как

и

оценивается как , который оценивается как

20 апр. 2011, в 12:38
Поделиться

3

Я считаю, что это

… как имеет приоритет в соответствии с MSDN.

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

20 апр. 2011, в 13:54
Поделиться

2

Это эквивалентно

& & оператор имеет более высокий приоритет, чем || Оператор.

20 апр. 2011, в 14:07
Поделиться

& & имеет более высокий приоритет, чем ||
поэтому первые два варианта использования будут действовать точно так же.
Скобки не имеют никакого значения здесь, как в:

a * b + c = (a * b) + c

Вы можете контролировать приоритет и ассоциативность с помощью фигурных скобок. поэтому третий вариант использования проверяет условие OR, а затем AND.

20 апр. 2011, в 14:19
Поделиться

Вышеприведенное выражение оценивается как из-за приоритета оператора (& & имеет более высокий приоритет, чем ||).

Посмотрите эту ссылку для получения дополнительной информации о приоритете оператора: http://msdn.microsoft.com/en-us/library/aa691323 (v = vs. 71).aspx

20 апр. 2011, в 13:55
Поделиться

Если вы используете в этом выражении || true, что среднее значение не имеет значения для другого результата, оно всегда будет истинным

20 апр. 2011, в 13:42
Поделиться

имеет более высокий приоритет, поэтому вторая форма (из трех) правильная. Что касается логики, имеет тенденцию смутно ассоциироваться с умножением и с добавлением (если вы используете нуль и ненулевое значение для представления false и true, соответственно, операторы имеют эквивалентную семантику). Но в основном это так, как это было с C, и, возможно, до C.

20 апр. 2011, в 12:50
Поделиться

Ещё вопросы

  • 4Лучший способ передать контрольные значения из формы в отдельный класс
  • 4DataContractSerializer требует конструктор без параметров в абстрактном базовом классе
  • 3Чтение списка просмотра данных из MVVM
  • 4Передача аргумента командной строки после установки службы с использованием c #
  • 4Какой элегантный способ попробовать поймать свойства в C #
  • 4Вызов System.Threading.Timer длится пару секунд каждый день
  • 4Повторное использование меню с mvvm и wpf
  • 4Select не работает на IQueryable, но работает на IList
  • 4C # разделить время на часовые блоки
  • 4Любое расширение Visual Studio 2010 для автоматической конкатенации на новой линии?

Реализация в различных языках программирования [ править | править код ]

Ada

Язык программирования Ada определяет Boolean в пакете Standard как нумерованный тип со значениями False и True в котором False True .

Родственные операторы ( = , /= , , , > , >= ) применяются ко всем нумерованым типам, включая Boolean . Булевы операторы and , or , xor и not применимы к типу Boolean и любым объявленным подтипам. Булевы операторы также применимы к массивам, содержащим значения Boolean .

Algol

Algol 60 имеет тип данных boolean и соответствующие операторы, установленные в спецификации Algol 60. Тип данных был сокращён до bool в ALGOL 68.

C

В языке программирования C, который не предоставлял булевых значений в C89 (но вводит в C99) вместо значений true/false было установлено сравнение значения с нулём. Для примера, код:

Это было честно для целочисленного типа данных (integer); тем не менее, бинарные значения чисел с плавающей запятой (floating-point) были приближёнными к выводимым на экран десятичным значениям, и это давало ошибки при сравнении. Традиционно, целое содержало одну (или более) булеву переменную (одну на каждый разряд целого).

Haskell

В языке Haskell булев тип данных реализован как простейший алгебраический тип данных:

В стандартном модуле Data.Bool для него определены функции && , || и not .

Python

В языке Python булев тип данных обозначается как bool , для приведения других типов данных к булеву существует функция bool() , работающая по следующим соглашениям:

  • строки: пустая строка — ложь, непустая строка — истина;
  • числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина;
  • списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина;
  • функции — всегда истина.

Для других объектов результат рассчитывается через метод __nonzero__ , который в идеале должен возвращать значения True или False .

Булев тип приводится к следующим типам данных:

  • строковый: True для истины, False для лжи;
  • числовой (встроенные типы int и float ): 1 для истины, 0 для лжи.

К другим типам данных булев тип не приводится.

В Python 2.6 есть интересная особенность — можно переопределить значение True на False и наоборот, написав всего лишь:

или, вариант для всей области видимости

что может привести к весьма неожиданному поведению интерпретатора или IDLE. В Python 3 данная возможность была ликвидирована — True и False считаются зарезервированными, как и слово None .

Pascal

Арифметические операции над булевыми недопустимы, но допустимы логические операции: Not, And, Or, Xor, операции отношения = (равно), <> (не равно) и функции Ord, Pred, Succ.

Ruby

В Ruby булев тип представлен двумя предопределенными переменными: true и false . Появляется логический тип в результате логических операций или вызова логических методов. По традиции, имя логических методов (то есть методов, которые возвращают значение true или false) заканчивается на «?».

В качестве false может выступать nil , а в качестве true — любой объект, в том числе переменная со значением «0» или пустая строка, что часто является неожиданностью для новичков.

Материал на этой странице устарел, поэтому скрыт из оглавления сайта.

Более новая информация по этой теме находится на странице https://learn.javascript.ru/logical-operators.

Для операций над логическими значениями в JavaScript есть || (ИЛИ), && (И) и ! (НЕ).

Хоть они и называются «логическими», но в JavaScript могут применяться к значениям любого типа и возвращают также значения любого типа.

Оператор ИЛИ выглядит как двойной символ вертикальной черты:

Логическое ИЛИ в классическом программировании работает следующим образом: «если хотя бы один из аргументов true , то возвращает true , иначе – false «. В JavaScript, как мы увидим далее, это не совсем так, но для начала рассмотрим только логические значения.

Получается следующая «таблица результатов»:

Если значение не логического типа – то оно к нему приводится в целях вычислений. Например, число 1 будет воспринято как true , а 0 – как false :

Обычно оператор ИЛИ используется в if , чтобы проверить, выполняется ли хотя бы одно из условий, например:

Можно передать и больше условий:

Операторы сравнения

В программировании операторы сравнения используются при оценке и сравнении значений для последующего сведения их к одному логическому значению (True или False).

Операторы сравнения Python 3 представлены в этой таблице:

Оператор Значение
== Проверяет равенство между компонентами; условие истинно, если компоненты равны.
!= Проверяет равенство между компонентами; условие истинно, если компоненты НЕ равны.
< Оценивает значение левого компонента; условие истинно, если он меньше, чем правый.
> Оценивает значение левого компонента; условие истинно, если он больше, чем правый.
<= Оценивает значение левого компонента; условие истинно, если он меньше или равен правому компоненту.
>= Оценивает значение левого компонента; условие истинно, если он больше или равен правому компоненту.

Попробуйте поработать с этими операторами, чтобы понять, как они действуют.  Для начала создайте пару переменных:

Теперь сравните значения переменных с помощью вышеперечисленных операторов.

Следуя математической логике, Python оценивает соотношения между значениями переменных так:

  • 5 равно 8? Ложь
  • 5 не равно 8? Истина
  • 5 меньше 8? Истина
  • 5 больше 8? Ложь
  • 5 меньше или равно 8? Истина
  • 5 больше или равно 8? Ложь

Также операторы сравнения можно применять к числам с плавающей точкой и строкам.

Примечание: Строки чувствительны к регистру; чтобы отключить такое поведение, нужно использовать специальный метод.

Попробуйте сравнить две строки:

Строки Hello и hello содержат одинаковый набор символов, однако они не равны, поскольку одна из них содержит символы верхнего регистра. Попробуйте добавить ещё одну переменную, которая также будет содержать символы верхнего регистра, а затем сравните их.

Также для сравнения строк можно использовать операторы > и <. Python выполнит лексикографическое сравнение строк на основе значений символов ASCII.

Операторы сравнения можно применять к логическим значениям True и False:

Обратите внимание на разницу между операторами = и ==

Булевы типы

Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false < true. Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord, succ, pred, процедуры inc и dec.

Значение типа boolean занимает в памяти 1 байт.

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

var 
bboolean; 
wbwordbool; 
begin 
b= false; 
b= pred(b); 
writeln(b,' ',ord(b)); // TRUE 255 
writeln(b=true); // TRUE 
 
wb= false; 
wb= pred(wb); 
writeln(wb,' ',ord(wb)); // TRUE -1 
 
b= true; 
b= succ(b); 
writeln(b,' ',ord(b)); // TRUE 2 
 
wb= true; 
wb= succ(wb); 
writeln(wb,' ',ord(wb)); // FALSE 0 
end.

Логические операции

С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.

В языке программирования Pascal предусмотрены следующие логические операции:

true xor true = false
true xor false = true
false xor true = true
false xor false = false

  • Конъюнкция (логическое умножение, пересечение) — and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.
    true and true = true
    true and false = false
    false and true = false
    false and false = false
  • Дизъюнкция (логическое сложение, объединение) – or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.
    true or true = true
    true or false = true
    false or true = true
    false or false = false
  • Отрицание (инверсия) – not. Выражение not a имеет значение, противоположное значению a.
    not true = false
    not false = true
  • Исключающее ИЛИ – xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.

Последовательность выполнения логических операторов: not, and, or.

В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (>, >=, <, <=, <>, =), поэтому не нужно забывать расставлять скобки в сложных логических выражениях.

Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции {B+}.

Стандартные булевские функции

  • odd(x) = true, если x нечетный (x целый тип);
  • eoln(x) = true, если встретился конец строки текстового файла x;
  • eof(x) = true, если встретился конец файла x.

В остальных случаях эти функции принимают значение false.

Таблицы истинности

Математическая логика – очень полезная в программировании область знаний. В данном руководстве мы ознакомимся с основными её аспектами.

Ниже представлены таблицы истинности для оператора сравнения == и всех логических операторов. Ими можно пользоваться при написании логических выражений. В таблицах перечислены общие случаи использования оператора, потому их рекомендуется выучить наизусть.

Таблица истинности оператора NOT

not x Результат
not True False
not False True

Таблицы истинности – общие математические таблицы, которые используются в логике. Их полезно выучить наизусть, чтобы затем применять при построении алгоритмов и написании программ.

Значения вместо булевых переменных

В Python, как и в других языках, есть логический тип переменных bool, который имеет всего два значения: True (истина) и False (ложь). Его возвращают логические операторы (например сравнение чисел или проверка присутствия элемента в списке), и именно этот тип обычно используется в if и while. Тем не менее, явно использовать bool или операторы необязательно: существуют правила, по которым значение любого типа приводится к True или False.

Прим. пер. По-английски это называется truthy и falsy, то есть «примерно-но-не-совсем-истинные», «истинноватые» значения. Общепринятого русского перевода нет, но в этой статье под истинным или ложным значением объекта всегда подразумеваются именно эти штуки, а булевы значения везде названы True и False.

Вот как это работает:

Логические значения могут быть объектами

Как правило, на JavaScript, логические примитивные значения, созданные из литералов::

Но логические значения также могут быть определены как объекты с ключевым словом new:

Пример

var x = false;
var y = new Boolean(false);
//typeof x возвращается булевы
//typeof y возвращается объект

Не создавать логические объекты.
Они замедляют скорость выполнения.
Ключевое слово new усложняет код. Оно может привести к неожиданным результатам:

При использовании оператора ==, равные логические значения равны:

Пример

var x = false;             
var y = new Boolean(false);
// (x == y) истинно, потому что x и y имеют равные значения

При использовании оператора === равные логические значения не равны, поскольку оператор === ожидает равенства как по типу, так и по значению.

Пример

var x = false;             
var y = new Boolean(false);
// (x === y) ложно, потому что x и y имеют разные типы

Или еще хуже. Объекты нельзя сравнивать:

Пример

var x = new Boolean(false);             
var y = new Boolean(false);
// (x == y) ложно, так как объекты нельзя сравнивать

Обратите внимание на разницу между и .
Сравнение двух объектов JavaScript всегда будет возвращать false

Доступные операции с этим типом данных

К этому типу данных применимы следующие операции, в скобках указаны символические обозначения операций в некоторых популярных языках программирования:

  • И (логическое умножение) (, , ),
  • ИЛИ (логическое сложение) (, , ),
  • исключающее ИЛИ (сложение с переносом) (, , ),
  • эквивалентность (равенство) (, , )
  • инверсия (, , )
  • сравнение (, , , )

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

JS Tutorial

JS HOMEJS IntroductionJS Where ToJS OutputJS StatementsJS SyntaxJS CommentsJS VariablesJS OperatorsJS ArithmeticJS AssignmentJS Data TypesJS FunctionsJS ObjectsJS EventsJS StringsJS String MethodsJS NumbersJS Number MethodsJS ArraysJS Array MethodsJS Array SortJS Array IterationJS DatesJS Date FormatsJS Date Get MethodsJS Date Set MethodsJS MathJS RandomJS BooleansJS ComparisonsJS ConditionsJS SwitchJS Loop ForJS Loop WhileJS BreakJS Type ConversionJS BitwiseJS RegExpJS ErrorsJS ScopeJS HoistingJS Strict ModeJS this KeywordJS LetJS ConstJS Arrow FunctionJS DebuggingJS Style GuideJS Best PracticesJS MistakesJS PerformanceJS Reserved WordsJS VersionsJS Version ES5JS Version ES6JS JSON

Краткие выводы

  • Все логические операторы применяются к булевским выражениям, то есть таким, о которых можно сказать, true они или false.
  • Если операторы , или применяются к числам, речь идёт уже не о логических операциях, а о побитовых. То есть оба числа переводятся в двоичную систему и к этим числам побитово применяют операции логического сложения, умножения или вычитания.
  • В математической логике операторам и соответствуют конъюнкция и дизъюнкция.
  • Логическое И похоже на умножения 1 (true) и 0 (false).
  • Логическое ИЛИ напоминает поиск максимума среди 1 (true) и 0 (false).
  • Для побитового отрицания целого числа a используется операция .
  • Для логического отрицания булевского выражения a используется операция .
  • Отрицательные числа хранятся и обрабатываются в дополнительном коде.
  • Поразрядный сдвиг вправо может сохранять знак (), а может — не сохранять ().
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *