Основные понятия
Двоичная информатика - раздел информатики, описывающий правила обработки логических высказываний на основе двоичного счисления и двоичной алгебры, которую также называют бинарной алгеброй, алгеброй логики или булевой алгеброй, в честь математика XIX в. Джорджа Буля, одного из ее основоположников.
Высказываниями называются утверждения, которые могут быть либо истинными, либо ложными. Пример истинного высказывания: "ель - это дерево"; пример ложного: "медведь - это рыба".
Алгебра логики базируется на нескольких аксиомах, касающихся арифметических операций над двоичными числами. Информатика изучает двоичные методы хранения чисел, выполнения арифметических действий над ними, а также составления алгоритмов на основе истинных и ложных логических выражений.
Двоичное счисление
Привычное человеку десятичное счисление удобно на бытовом уровне и возникло в силу естественной причины: у человека 10 пальцев на руках. С их помощью древние люди выполняли простые вычисления, и эта традиция укоренилась в математике. Между тем, десятичная система не является единственно возможной. Даже в древности существовали альтернативы, например, двенадцатиричная, основанная не на десятках, а на дюжинах.
С возникновением потребности в автоматизации вычислений выявился существенный недостаток десятичной системы. Хотя старинные механические арифмометры работали в десятичной системе, на их технологической базе невозможно было создать устройства, сопоставимые по скорости вычислений с современными компьютерами.
Рисунок 1. Механические арифмометры работали в десятичной системе. Автор24 — интернет-биржа студенческих работ
Компьютеры используют для вычислений электричество, и для реализации десятичной системы пришлось бы задействовать 10 уровней электрического напряжения или тока. Это сложно реализовать технически. К тому же такая система была бы слишком неустойчива, поскольку, например, отличить 1 вольт напряжения от 2 вольт легко (разница в 2 раза), а отличить 8 вольт от 9 вольт могут помешать помехи (броски тока в силовой сети и т. п).
Двоичная система, в которой используются всего 2 цифры - 0 и 1 - лишена этого недостатка. При ее технической реализации можно использовать всего два уровня электрического напряжения: 0 и любой другой, который технически достоверно можно отличить от нулевого, например, 5 вольт. Оперируя двумя уровнями сигнала, можно записать в двоичной форме любое достаточное для практических целей число, а также выполнять действия над ним с помощью электронных вычислительных машин.
Существуют простые алгоритмы преобразования из десятичного формата в двоичный и обратно, которые сравнительно легко реализовать для ввода данных и их вывода на монитор.
Рисунок 2. Преобразование двоичного числа в десятичное. Автор24 — интернет-биржа студенческих работ
Достоинством двоичного счисления является то, что помимо выполнения математических действий с его помощью можно вычислять истинность и ложность высказываний, обозначая истинные как 1, а ложные как 0. В компьютерных программах, когда нужно подчеркнуть, что речь идет не о числах, а об истинности и ложности высказываний, используют ключевые слова true и false, т. н. переменные логического типа.
Недостатком двоичного счисления является то, что записанные в этой системе числа получаются гораздо длиннее десятичных, однако для компьютеров этот фактор не является критическим.
Логические операции в компьютерных программах
Алгебра логики реализована в языках программирования с помощью операторов:
- логическое "ИЛИ" (логическое сложение, оператор "OR", или, в терминах алгебры логики, дизъюнкция); обозначается во многих языках программирования как «||»;
- логическое "И» (логическое умножение, "AND», конъюнкция); обозначается как «&&»;
- логическое отрицание ("NOT"); обозначается как «!»;
- исключающее "ИЛИ" ("XOR"); обозначается как «^»;
- операции сдвига;
- операции дополнения.
Кроме логических операторов, в программах используются операторы ветвления (if ... else, switch...), позволяющие переходить к разным частям программы в зависимости от истинности или ложности вычисленных выражений. Результаты арифметических операций сравнения чисел, такие как "больше", "меньше", в программах также интерпретируются как переменные логического типа.
Рассмотрим пример создания программы, отвечающей за освещение письменного стола офисного работника. Предположим, она запущена в неком контроллере (например, устройстве для “умного дома”) и непрерывно получает на вход два сигнала: с датчика освещенности (достаточно ли света в помещении) и с датчика присутствия (находится ли работник за столом). Лампа включается только тогда, когда человек сидит за столом и света недостаточно (закончилось светлое время суток, задернули шторы и т.п.).
Не вникая в детали реализации, условимся, что за включение/выключение лампы отвечают внешние функции turnOn и turnOff. Напишем функцию, принимающую аргументы light (освещенность в процентах) и presence (присутствие, логическая переменная true или false). Допустим, лампу нужно включать, при освещенности 40% и ниже.
function dealWithLamp (light, presense) { // Функция получает 2 параметра.
// Проверяем уровень освещенности // и записываем в переменную логического типа. var lightOK = light > 40;
// Если света недостаточно // и работник на месте - // включить лампу. if(! lightOK && presense) turnOn();
// В противном случае выключить лампу, т.е. света достаточно // или работник отлучился. else turnOff(); }
В данном примере задействованы оператор логического умножения (&&), отрицание (! lightOK) и ветвление if... else в зависимости от истинности или ложности условий, которые нужно отслеживать.