логические операторы

Предыдущая тема Следующая тема Перейти вниз

логические операторы

Сообщение  Eric-S в Вс Сен 21, 2008 4:59 am

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


введение

Ло?гика (др.-греч. ?????? «наука о рассуждении», «искусство рассуждения» от ????? — «речь», «рассуждение»)

Логика это наука о том как из имеющихся фактов получить истину.

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

Но для начала, нам нужно договориться, что по чём.

"лож" - ноль, не верное выражение.

"истина" - верное выражение, не ноль.

Два противоположных, противопоставленных понятия.

Далее, чтобы не путаться, просто будем считать, что "лож" обозначаеться цифрой "0", а "истина" цифрой "1".


"логическое выражение" - конструкция, результатом вычисления которой является "истина" или "ложь".

"логический оператор" - операция сравнения, позволяющая строить логические выражения.

В математике есть выражения и операторы, тут всё очень похоже.

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

Компьютер же, чтобы сделать какое-то решение использует именно логические выражения. Есть конечно ещё "эвристические алгоритмы" или "нечёткая логика", но напрямую для этого нужны специальные процессоры, а обычные компьютеры i86, используют именно простую логику.

При вычислении выражения, не имеет значения, что вычисляеться, важно лишь, истина или лож. Так например число 666 будет считаться истинным, поскольку это явно не ноль. А то насколько велико или мало это число, в логических выражениях обычно не важно.
Многие выражения могут показаться дикими или пародоксальными, но не обращайте внимания на кажущуюся бессмыслицу, смотрите в корень и вы узнаете истину!

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


not (отрицание)

Я вот выше несколько раз использовал частицу "не". Это кстати один из операторов not. Он делает из истины лож и обратно.


вот например, истина это понятно и просто. А если не истина?
"не истина"
это однозначно лож.

Или наоборот
"не лож"
Это конечно же истина.

Приведу ещё более конкретный пример.
"день" это "не ночь"
"ночь" это "не день"


Истинное выражение делает ложным, а ложное делает истинным.

Таблица истинности
выражение 1результат
01
10


or (объединяющее или)

называемая также "дизъюнкция".(Inclusive Disjunction).

Слово "или" мы используем тоже часто будьто "день или ночь".

Если я скажу что
"сейчас день"
то я могу угадать, но могу и ошибиться, если читают сей текст глубокой ночью. Тоже самое будет, если я скажу
"сейчас ночь".
Но вот если я скажу, что этот текст вы читаете
"днём или ночью"
То не ошибусь. Смотрите как интересно получаеться, я взял два выражения, одно ложное, а другое истинное их соеденил и получил истину. Причём я ведь даже не знаю, какое из выражений ложное.

"лож или истина"
всегда будет истина. Даже если перевернуть:
"истина или лож"

Но как это обычно бывает, вкралось "но". Если взять два ложных выражения, ну например вы умудрились оказаться в таком месте и в такое время, где и не поймёшь, что сейчас день или ночь. Как я слышал, если летать по орбите, там будет вечный день а может ночь, но на Земле, часы показывают какое-то время. Но что брать за правильное? Время по Гринвичу, Московское, или того места над которым вы сейчас пролетаете?
И так, мои утверждения "сейчас день" и "сейчас ночь" стали ложными.
А что жестало с моим выражением:
"сейчас день или ночь"
Оно стало ложным, поскольку содержит одну ложь. И так, выражение
"лож или лож"
всегда будет ложным.


Но у нас есть ещё один вариант, это когда две истины. Хм. Тут и пример с днём и ночью не очень подходит. Ладно, пускай у вас механические часики, у которых только 12 часов и по ним трудно сказать, ну а в окно выглянуть затруднительно. Допустимвы в глубоком подземном бункере. Да, согласен, пример надуманный, слишком фантастический, ведь вы не носите механических часов.
Так вот, вы смело можете, в такой ситуации, утверждать, что сейчас день, но поскольку вы хотите спать, то сейчас ночь. Значит оба наших выражения оказались истинными. Чтож, составим логическое выражение
"сейчас день или ночь"
И это будет истиной.


Короче, когда хоть одна часть истинна, то на выходе будет истина.

таблица истинности
выражение 1выражение 2результат
0 0 0
0 1 1
1 0 1
1 1 1


xor [исключающее или)[

Исключающее или (Exclusive Disjunction). Часто просто "исключение".

Этот оператор дополняет обычное (включающее) или. Аналогов в русском языке нет. Считайте это просто надуманным действием. Но оператор xor в компьютерной логике занимает далеко не последнее место.

Почему есть вообще разные "или" "включающие" и "исключающие". Разница между этими двумя операторами заключаеться в том, как они относяться к тому, что оба выражения истинны.
для or из двух истин получаеться истина,
а xor истенным считает выражение, в котором есть только лож и истина.
По этому xor и называеться "исключающим", он исключает две истины.

Помните, наш надуманный пример где у вас были механические часы? Мы просто решили считать, что оба утверждения истинны, но с темже успехом они могут быть оба ложных. А это значит, что в результате будет лож.
"в бункере день или ночь"

таблица истинности
выражение 1выражение 2результат
0 0 0
0 1 1
1 0 1
1 1 0


and (и)

Также называеться "конюнкция" (Conjunction).


Примеры про "день и ноч" себя исчерпали. Но давайте их всё же домучаем. Как вам такое утвержденье:
"сейчас день и ночь"
Ужас! Если конечно иметь в виду одно конкретное место, например где вы сейчас находитесь.
Это выраженье конечноже ложно.

Оператор and даёт истину, только тогда, когда обе части выражения истины. В любых других случаях будет лож.
Запомните, истину даст только истина и ещё раз истина.


таблица истинности
выражение 1выражение 2результат
0 0 0
0 1 0
1 0 0
1 1 1



eqv (эквивалентность)

Эквивалентность или проще говоря одинаковость. Возвращаеться истина, если обе части, левая и правая одинаковы.
Еслиже части не соответствуют, то возвращаеться 0.

Переводя на русский (Equivalence) можно заменить на слово "это".

"день это день"
"ночь это ночь"
Логично? Естественно, тут и нечего думать, возвращаеться -1.


А вот
"ночь это день"
"день это ночь"
полный бред. Ну и соответственно получаем 0.

таблица истинности
выражение 1выражение 2результат
0 0 1
0 1 0
1 0 0
1 1 1


imp

Импликация (Implication).

Если левая часть истинна, а правая ложь, то на выходе ложь, иначе истина.

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

Returns the bitwise-and (implication) of two numeric values

This operator returns the bitwise-implication of its operands, a logical operation that results in a value with bits set depending on the bits of the operands.

The truth table below demonstrates all combinations of a boolean-implication operation:




таблица истинности
выражение 1выражение 2результат
0 0 1
0 1 0
1 0 1
1 1 1






заключение

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

В этой главе небыли рассмотрены логические операторы для побитовых действий.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: логические операторы

Сообщение  Eric-S в Вт Окт 07, 2008 9:15 am

Есть очень интересный проект, по реализации булевого типа данных
Boolean Type by Imortis

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения