...Люба повернулась к нему и произнесла
– Сергей, так ты сказал мне неправду?
– Нет, я сказал тебе ложь.- После этих слов она пренебрежительно отмерила его взглядом и не произнося ни слова, ушла прочь.
Однако в компьютерах такое вряд ли могло быть, ведь там есть только два состояния – истина или ложь, и в теории никогда не бывает неправды, сейчас я это объясню.
Ранее мы уже рассмотрели этот вариант, что бит со значением 0 (ноль) – это ложь, а бит со значением 1 – это истина.
Кстати, чтобы не путать букву “О” и цифру “0” (ноль), ноль когда-то давно выглядел вот так Ø (перечеркнутый ноль) и это действительно было удобно, ведь это два разных символа, и иногда шрифт такой, что не сложно их спутать. Особенно, когда речь идёт о так называемых Captcha – кодах из букв и цифр, которые нужно пользователю ввести, чтобы “подтвердить”, что он человек. Мне кажется, этот символ незаслуженно пропал из обихода. Сейчас он используется крайне редко.
Итак, истина или ложь. Например, я хочу изложить состояние погоды вчера и сегодня и говорю,- вчера шёл дождь, а сегодня дождь не идёт. Значит получается, что вчера наличие дождя – это истина, а сегодня наличие дождя – это ложь. Вроде тут всё должно быть понятно, мы одним битом можем описать был дождь или его не было, но это только если…я не соврал. Тогда возникает третье состояние – неопределенности, т.е. дождь-то на самом деле был, но я сказал, что его не было, а как моему собеседнику считать, всё-таки был дождь или нет? У людей такое происходит сплошь и рядом, а вот в вычислительных системах крайне редко. Человек подвержен воле, а компьютер – электромагнитным всплескам, и то и другое влияет на результат, но если в компьютерах это предусмотрели и сделали контроль ошибок и автоматическое их исправление, то у людей, скорее всего такого контроля нет. По этому, хоть вопрос и сложный, мы будем исходить из теории того, что в компьютерах есть только два состояния и никогда не бывает никакого другого.
Теперь рассмотрим обычную фразу “Я пойду на улицу гулять, только если не будет дождя, ну или хотя бы будет тепло”. С точки зрения компьютерной логики эта фраза бы выглядела так:
ЖеланиеИдтиГулять = НЕ Дождь ИЛИ Тепло
Тут есть вопросы по этой формуле? Со всем согласны и всё поняли? Если не так – пишите комменты разберём, это основы, которые нужно понимать с самого начала. В этой формуле есть два логических действия:
- “НЕ” – знак отрицания, отрицание переменной стоящей после него, т.е. если переменная была равна 0, то становится 1, и наоборот. Иногда называется инверсией аргумента, а операция – инвертированием.
- “ИЛИ” – называется логическое сложение. Результат истина, если хотя бы одна из переменных стоящих слева или справа от него равна истине
Так, а можно ли записать это желание идти гулять как-то по другому? Конечно можно, ведь я мог сказать и по другому – Я пойду на улицу гулять, только если не будет дождя или будет не холодно”. Согласитесь, общий смысл совершенно такой же. Как такая фраза будет записано логической формулой?
ЖеланиеИдтиГулять = НЕ Дождь ИЛИ НЕ Холодно
Мы заменили наличие теплой погоды с истины на ложь, но поставили перед этим оператор “НЕ”, и вернули смысл этой части выражения. А можно ли ещё как-то сказать фразу с этим же смыслом? Да, можно и по другому – Я не пойду гулять, если будет дождь и одновременно будет холодно. Смотрите, я сохранил общий смысл фразы, но аргументы формулы изменились полностью:
НежеланиеИдтиГулять = Дождь И Холодно
Однако, мы не знаем, что такой за результат “Нежелание”, у нас должно быть желание, поэтому перефразируем – Я пойду гулять, только если не будет одновременно идти дождь и на улице холодно, т.е. фактически так:
ЖеланиеИдтиГулять = НЕ (Дождь И Холодно)
Мы просто переставили НЕ из левой части в правую, так можно делать даже и в математике:
-A = B
=>
A = -B
Не будем отвлекаться, в этой нашей формуле мы использовали новый оператор “И”:
- “И” – называется логическое умножение. Результат истина только если оба аргумента (слева и справа) будут истина, в ином случае значение будет ложь.
Из этих трех логических операторов И, ИЛИ, НЕ состоит вся компьютерная логика. В зарубежной литературе они называются аналогично – AND, OR, NOT.
В различных языках программирования эти действия используются постоянно, на них построены все результаты сравнения и условия. Например, в языке Си эти операторы записываются специальными знаками &, |, !, например:
C = A & B;
D = A | B;
E = !A;
, а в языке 1С – прямо по-русски:
ПрибалятьКСуммеНашихОстатков = НЕ СчетЗабалансовый И ЭтоУчетТоваров;
Мы помним из младших классов математики, что у вычислительных операций есть приоритет. Сначала производятся все умножения и деления, а затем вычитания и сложения, но весь этот приоритет выполняется с учетом скобок (если они есть). В логических операциях как-то примерно так, но немного по другому. Скобки имеют тот же смысл, что и в математики. Операции в скобках выполняются первыми (с учетом приоритета каждой операции внутри самих скобок). Самый высокий приоритет у операции отрицания, все операции “НЕ” выполняются в первую очередь (опять-таки с учетом скобок). Затем выполняются операции логического умножения, а уже после них логического сложения. Чтобы понять объясню “на пальцах”. Есть формула:
Результат = НЕ (Параметр2 И Параметр3 ИЛИ НЕ Параметр4) И Параметр5
Первым делом будет выполнена инверсия находящаяся внутри скобок:
НЕ Параметр4
Затем будет выполнено логическое умножение:
Параметр2 И Параметр3
После этого будет выполнено ИЛИ между ними. Затем будет инверсия находящегося этого промежуточного результата в скобках:
НЕ (…)
И лишь после этого инвертированный промежуточный результат будет логически умножен на Параметр5 и получен итоговый Результат.
В логических операциях есть метод упрощения, который может существенно улучшать читаемость логической формулы, особенно когда условий в ней очень много, например:
ЖеланиеИдтиГулять = (НЕ Дождь ИЛИ НЕ Холодно) ИЛИ НЕ (НЕ ДеньПослеЗарплаты ИЛИ НЕ ЭтоПятница)
Ну так когда же я захочу идти гулять при такой формуле??? Обязательно ли новое условие, что это должен быть день после зарплаты и это должна быть пятница, или я пойду в такие дни гулять при любой погоде, или нужно соблюдение всех перечисленных условий? Для этого нужно упростить хотя бы выражение чтобы не “ломать голову” сложными преобразованиями. Для этого нужно знать три простых метода преобразования:
Метод1: НЕ НЕ Параметр1 = Параметр1
Метод2: Параметр1 И Параметр2 = НЕ (НЕ Параметр1 ИЛИ НЕ Параметр2)
Метод3: Параметр1 ИЛИ Параметр2 = НЕ (НЕ Параметр1 И НЕ Параметр2)
Тогда можем преобразовать левую часть сначала по методу 2, а следом по методу 1:
(НЕ Дождь ИЛИ НЕ Холодно) = НЕ (Дождь И Холодно), т.е. левая часть говорит, что результат истина, если нет одновременно дождя и на улице холодно, т.е. если хотя бы нет дождя или хотя бы не холодно, то результат этой части истина.
Теперь вторая часть тоже по тем же методам:
НЕ (НЕ ДеньПослеЗарплаты ИЛИ НЕ ЭтоПятница) = (ДеньПослеЗарплаты И ЭтоПятница)
В результате получается:
ЖеланиеИдтиГулять = НЕ (Дождь И Холодно) ИЛИ (ДеньПослеЗарплаты И ЭтоПятница)
По-русски это будет звучать так: У меня будет пойти желание гулять, только если нет на улице одновременно дождя и холода независимо от дня зарплаты и дня недели, но могу и пойти гулять если это день после зарплаты и одновременно этот день выпадет на пятницу независимо от погоды. В ином случае желания гулять не возникнет. Операция “ИЛИ” между левой и правой частью как раз и делает языковое выражение словами “независимо” или словами “хотя бы”, т.е. раньше я говорил, что “ИЛИ” – это когда истина хотя бы один из аргументов слева или справа (независимо друг от друга, хотя бы один из них). Напоминаю, операция “И” – наоборот,- чтобы результат был истина, нужно чтобы оба аргумента были истина, это выражается формой русской речи “одновременно”, т.е. “результат истина, когда одновременно левая и правая части истина”.