понедельник, 16 августа 2010 г.

Мир логики

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

В самом начале определим понятие бит, как единицу информации, принятой в двоичной логике. Обычно в логике он принмсает два значения - истина и ложь. При записи в прогах это соответствует значениям - true и false, или в сашином представлении, как - 1 и 0. Фактически под значение истина в проге - логическое значение принимает любое слово отличное от нуля. Т.е. если мы при оперировании переменной в условных операциях в качестве аргумента подставляем значение отличное от нуля, то логическая операция считает эту величину - истиной. Это у многих вызывает некий супорт, и поэтому частенько в логических выражениях встречается некая такая последовательность на проверку аргумента по равенству нулю, что в конце концов в машинных кодах компьютера вырождается в неэффективность

Пример не-логичности: взято из плагина движка WP - WP-Optimize

if(!$comments==NULL||!$comments==0){
.........................
} else

Фактически - сначала интерпритатор заставляют перетранслировать два нелогичных сравнений (тратя время и рессурсы), которые в принципе есть одна и та же проверка одного и того же аргумента, ибо значения при операциях логики всегда приводятся по правилу приведенному выше к двум противоположным по-сути значениям, а затем в процессере дважды выполняют одинаковые действия, и наконец результат объединяется по логическому ИЛИ. Как я понимаю автор плагина хотел фразой: (!$comments==0) сказать, что надо вызвать действия при условии не равенства нулю аргумента, хотя проверка на нуль в компьютерах с любой системой команд - абсурдна, ибо это просто есть внутрення операция АЛУ любого процессора, которая есть суть проверки состояния результата, а потом это утверждение еще и проверяется, что оно не есть нуль. Фактически эта фраза в логичной записи правильно должна быть трансформирована в такую - ($comments), ибо как я раньше писал, любое значение логики отличное от по-битного нуля в аргументе есть истина.
Расшифрвываю для особливо тупых - значения аргумента равные === 1,89,966755: есть истина, а значение === 0: есть ложь, и все другие операции по проверке есть просто обыкновеный и тупой мазохизм от недоучек- бакалавров и аспирантшизы

Сначала рассмотрим какие операции в природе есть. Их всего, в качестве основных, принято три+1.

Эта плюс 1 - операция, постороеная на основных , но она все же имеет самостоятельное значение, так как стала основой при построении арифметической операции сложении, и может реаллизоваться по другому принципу, отличному от принципов реаллизации первых трех основных.



Основные операции

  1. Логическое НЕ - инверсия битов
      Если аргумент равен истине, результат принимает значение - ложь , и наоборот
  2. Логическое И - умножение битов
      Если все аргументы равны истине, то результ - истина, и ложь в любых других случаях
  3. Логическое ИЛИ - сложение битов
      Если хотя бы один из аргументов равен истине, то результат то же истина,и ложь в любых других случаях

Операцией +1 - стала Исключающая ИЛИ, которая принимает значение истина при неравности исходных аргументов

Есть в математической логике и еще одна, но очень малоизвестная операция, и так же мало-используемая, тем более в прогах - это мажоритарная функция битов или мажоритар. Основное ее назначение - это коды проверки и надежности при передачи инфы, но эта логика - так же используется в арифметике, а имено при реаллизации операции арифметического умножения. Правило мажоритара - результат принимает истину, если два из трех аргументов тоже истина, и ложь в любых других случаях


И последнее, перед тем как перейти к приключениям на поприще битов, я отвлекусь на небольшое замечание. В последствии, после ознакомлении с функциями слияния и свертки на битовых операциях, ты поймешь что в принципе достаточно для создании любой логической функции всего две основные логики, а имено - обязательно НЕ и любая из основных или даже из +1, так как две другие из не-принятых в рассмотрении всего лишь вытекают логически из этих принятых. Не вдаваясь в подробности, я скажу тебе, что операцию И - можно заменить на операцию ИЛИ и наоборот, а так же на +1, но операция НЕ (отрицание) заменить нельзя, ибо Она в нашем Мире Логики несет роль черепахи, которая и держит тех знаменитых слонов, а имено - И, ИЛИ, +1, которые держат - всю логику на своих плечах.

Продолжение следует