Логический тип
Материал из Википедии — свободной энциклопедии
Логический (булев) тип данных — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых правдой и ложью. Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип. В подавляющем большинстве языков за истину полагается единица, за ложь - ноль.
Содержание |
[править] Реализация
Булевый тип данных может быть реализован с использованием только одного бита, но обычно используется минимальная адресуемая ячейка памяти (байт) или машинное слово, как эффективная единица работы с регистрами и оперативной памятью.
[править] Доступные операции
К этому типу данных применимы следующие операции:
- И (логическое умножение) (
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 было установлено сравнение значения с нулём. Для примера, код на C
if (my_variable) { printf("True!\n"); } else { printf("False!\n"); }
равнозначен коду
if (my_variable != 0) { printf("True!\n"); } else { printf("False!\n"); }
Это было честно для типа данных целочисленное (integer); тем не менее бинарные значения чисел с плавающей запятой (floating-point) были приближёнными к выводимым на экран десятичным значениям и это давало ошибки при сравнении. Традиционно, целое содержало одну (или более) булевую переменную (одну на каждый разряд целого).
[править] Глагол
В Глаголе логический тип обозначается служебным словом КЛЮЧ (от «ключевой»). Возможны два значения: ВКЛ
и ОТКЛ
, являющиеся встроенными в язык постоянными. Занимает в оперативной памяти 8 двоичных разрядов (ячейку), что сделано для наиболее быстрого доступа к данным этого вида.
Предусмотрены следующие логические действия:
а ИЛИ б
(если а, то ВКЛ, иначе б);а И б
(если а, то б, иначе ОТКЛ);НЕ а
(не а).
Эти действия применимы только к данным вида КЛЮЧ и дают ответ вида КЛЮЧ. Также, все отношения в Глаголе дают ответ логического типа.
Пример объявления и использования:
ПЕР работаем: КЛЮЧ; УКАЗ ЕСЛИ работаем ТО Выполнить(); работаем := ОТКЛ КОН
[править] Python
В языке Python булевый тип данных обозначается как bool
, для приведения других типов данных к булеву существует функция bool()
, работающая по следующим соглашениям:
- строки: пустая строка — ложь, непустая строка истина.
- числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина.
- списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина.
- функции — всегда истина.
Для других объектов результат рассчитывается через метод __nonzero__, который в идеале должен возвращать значения True/False.
Булевый тип приводится к следующим типам данных:
- строковый: 'True' для истины, 'False' для лжи.
- числовой (встроеные типы int, long, float): 1 для истины, 0 для лжи.
К другим типам данных булевый тип не приводится.
[править] Руби
В Руби булевский тип представлен двумя предопределенными переменными: true
и false
. Появляется логический тип в результате логических операций или вызова логических методов. По традиции, имя логических методов (то есть методов, которые возвращают значение true или false) заканчивается на «?».
В качестве false
может выступать nil
, а в качестве true
— любой объект, в том числе переменная со значением «0» или пустая строка, что часто является неожиданностью для новичков.