Логический тип: различия между версиями
[непроверенная версия] | [непроверенная версия] |
Ktulhy (обсуждение | вклад) →Python: дополнение |
Addbot (обсуждение | вклад) м Интервики (всего 23) перенесены на Викиданные, d:q520777 |
||
Строка 119: | Строка 119: | ||
[[Категория:Булева алгебра]] |
[[Категория:Булева алгебра]] |
||
[[Категория:Типы данных]] |
[[Категория:Типы данных]] |
||
[[ar:بوليان]] |
|||
[[cs:Boolean]] |
|||
[[de:Boolesche Variable]] |
|||
[[el:Τύπος δεδομένων αλήθειας]] |
|||
[[en:Boolean data type]] |
|||
[[es:Tipo de dato lógico]] |
|||
[[et:Tõeväärtus (andmetüüp)]] |
|||
[[fr:Booléen]] |
|||
[[it:Variabile booleana]] |
|||
[[ja:ブーリアン型]] |
|||
[[ko:불린 자료형]] |
|||
[[mhr:Логик тип]] |
|||
[[ms:Boolean]] |
|||
[[nl:Boolean]] |
|||
[[no:Boolsk variabel]] |
|||
[[pl:Logiczny typ danych]] |
|||
[[pt:Booleano]] |
|||
[[ro:Boolean (tip de date)]] |
|||
[[sv:Boolesk datatyp]] |
|||
[[th:ชนิดข้อมูลแบบบูล]] |
|||
[[tr:Boole'ca]] |
|||
[[uk:Логічний тип даних]] |
|||
[[zh:布爾 (數據類型)]] |
Версия от 23:08, 12 марта 2013
Логический, булев (англ. 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 для лжи.
К другим типам данных булев тип не приводится.
В Python 2.6 есть интересная особенность — можно переопределить значение True на False и наоборот, написав всего-лишь
True = False
или, вариант для всей области видимости
__builtin__.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
может выступать null
, а в качестве true
— любой объект, в том числе переменная со значением «0» или пустая строка, что часто является неожиданностью для новичков.