Логический тип
Логический, булев (англ. Boolean или logical data type) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых правдой (true) и ложью (false). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип. В подавляющем большинстве языков за истину полагается единица, за ложь — ноль.
Название Boolean получило своё название в честь английского математика и логика Джорджа Буля, среди прочего, занимавшегося вопросами математической логики в середине 19 века.
Содержание |
[править] Реализация
Булев тип данных может быть реализован с использованием только одного бита, но обычно используется минимальная адресуемая ячейка памяти (байт) или машинное слово, как эффективная единица работы с регистрами и оперативной памятью.
[править] Доступные операции
К этому типу данных применимы следующие операции:
- И (логическое умножение) (
AND,&,*), - ИЛИ (логическое сложение) (
OR,|,+), - исключающее ИЛИ (умножение с переносом) (
xor,NEQV,^), - эквивалентность (равенство) (
EQV,=,==) - инверсия (
NOT,~,!) - сравнение (
>,<,<=,>=)
Так же могут использоваться и другие операции булевой алгебры. Большинство языков программирования позволяют использовать булев тип и в арифметических операциях, приводя его к численному типу согласно принятым в языке правилам приведения типов.
[править] Применение
Традиционным применением булева типа данных являются значения «да»/«нет» в отношении результата более сложных операций.
Все операции сравнения двух величин (равно, больше, меньше), операции вхождения элемента в множество и проверка на пересечение множеств возвращают в качестве результата булев тип.
[править] Реализация в различных языках программирования
[править] Ada
Язык программирования Ada определяет Boolean в пакете Standard как нумерованный тип со значениями False и True в котором False < True.
type Boolean is (False, True); p : Boolean := True; if p then ... end if;
Родственные операторы (=, /=, <, <=, >, >=) применяются ко всем нумерованым типам, включая Boolean. Булевы операторы and, or, xor и not применимы к типу Boolean и любым объявленным подтипам. Булевы операторы также применимы к массивам, содержащим значения Boolean.
[править] Algol
Algol 60 имеет тип данных boolean и соответствующие операторы, установленные в спецификации Algol 60. Тип данных был сокращён до bool в ALGOL 68.
[править] C
В языке программирования C, который не предоставлял булевых значений в C89 (но вводит в C99) вместо значений true/false было установлено сравнение значения с нулём. Для примера, код
if (bool_variable) printf("True!\n"); else printf("False!\n");
равнозначен коду
if (bool_variable != 0) printf("True!\n"); else printf("False!\n");
Это было честно для целочисленного типа данных (integer); тем не менее, бинарные значения чисел с плавающей запятой (floating-point) были приближёнными к выводимым на экран десятичным значениям и это давало ошибки при сравнении. Традиционно, целое содержало одну (или более) булеву переменную (одну на каждый разряд целого).
[править] Python
В языке Python булев тип данных обозначается как bool, для приведения других типов данных к булеву существует функция bool(), работающая по следующим соглашениям:
- строки: пустая строка — ложь, непустая строка истина.
- числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина.
- списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина.
- функции — всегда истина.
Для других объектов результат рассчитывается через метод __nonzero__, который в идеале должен возвращать значения True/False.
Булев тип приводится к следующим типам данных:
- строковый: 'True' для истины, 'False' для лжи.
- числовой (встроеные типы int, long, float): 1 для истины, 0 для лжи.
К другим типам данных булев тип не приводится.
[править] Pascal
Описание переменных:
var a, b : Boolean
Арифметических операций нет, но допустимы логические операции: Not, And, Or, Xor, операции отношения =, <> и функции Ord, Pred, Succ.
var A, B: Byte; C, D, E, F: Boolean; begin A := Ord(False); {A=0} B := Ord(True); {B=1} C := Pred(False); {ошибка} D := Pred(True); {D=False} E := Succ(False); {E=True} F := Succ(True); {ошибка} end.
[править] Ruby
В Ruby булев тип представлен двумя предопределенными переменными: true и false. Появляется логический тип в результате логических операций или вызова логических методов. По традиции, имя логических методов (то есть методов, которые возвращают значение true или false) заканчивается на «?».
В качестве false может выступать nil, а в качестве true — любой объект, в том числе переменная со значением «0» или пустая строка, что часто является неожиданностью для новичков.
[править] См. также
|
|
|
|---|---|
| Неинтерпретируемые | Бит · Ниббл · Байт · Трит · Трайт · Слово |
| Числовые | Целый · Фиксированная запятая · С плавающей запятой · Рациональный · Комплексный · Длинный · Интервальный |
| Текстовые | Символьный · Строковый |
| Указатель | Адрес · Ссылка |
| Композитные | Алгебраический тип данных (обобщённый) · Массив · Ассоциативный массив · Класс · Список · Объект · Option type · Product · Структура · Множество · Объединение (tagged) |
| Другие | Логический · Низший тип · Коллекция · Перечисляемый тип · Исключение · First-class function · Opaque data type · Recursive data type · Семафор · Поток · Высший тип · Type class · Unit type · Void |
| Связанные темы | Абстрактный тип данных · Структура данных · Интерфейс · Kind (type theory) · Примитивный тип · Subtyping · Шаблон · Конструктор типа · Parametric polymorphism |

