Interested Article - Логический тип
- 2020-12-18
- 1
Логи́ческий тип да́нных , или булев тип, или булевый тип (от англ. Boolean или logical data type ) — примитивный тип данных в информатике , принимающий два возможных значения, иногда называемых истиной ( true) и ложью ( false) . Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В некоторых языках программирования за значение истина полагается 1, за значение ложь — 0.
Название типа Boolean получило в честь английского математика и логика Джорджа Буля , среди прочего занимавшегося вопросами математической логики в середине XIX века .
Реализация
Булев тип данных может быть реализован и храниться в памяти с использованием только одного бита , но обычно используется минимальная адресуемая ячейка памяти (обычно байт или машинное слово ), как более эффективная с точки зрения быстродействия единица хранения при работе с регистрами процессора и оперативной памятью .
Доступные операции с этим типом данных
К этому типу данных применимы следующие операции, в скобках указаны символические обозначения операций в некоторых популярных языках программирования:
-
И
(логическое умножение) (
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) были приближёнными к выводимым на экран десятичным значениям, и это давало ошибки при сравнении. Традиционно, целое содержало одну (или более) булеву переменную (одну на каждый разряд целого).
Haskell
В языке Haskell булев тип данных реализован как простейший алгебраический тип данных :
data Bool = False | True
В стандартном модуле
Data.Bool
для него определены функции
&&
,
||
и
not
.
Python
В языке
Python
булев тип данных обозначается как
bool
, для приведения других типов данных к булеву существует функция
bool()
, работающая по следующим соглашениям:
- строки: пустая строка — ложь, непустая строка — истина;
- числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина;
- списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина;
- функции — всегда истина.
Для других объектов результат рассчитывается через метод
__nonzero__
, который в идеале должен возвращать значения
True
или
False
.
Булев тип приводится к следующим типам данных:
-
строковый:
True
для истины,False
для лжи; -
числовой (встроенные типы
int
иfloat
): 1 для истины, 0 для лжи.
К другим типам данных булев тип не приводится.
В
Python
2.6 есть интересная особенность — можно переопределить значение
True
на
False
и наоборот, написав всего лишь:
True = False
или, вариант для всей области видимости
__builtins__.True = False
что может привести к весьма неожиданному поведению интерпретатора или IDLE. В Python 3 данная возможность была ликвидирована —
True
и
False
считаются зарезервированными, как и слово
None
.
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» или пустая
строка
, что часто является неожиданностью для новичков.
См. также
- 2020-12-18
- 1