Логический тип: различия между версиями

1012 байт добавлено ,  6 лет назад
уточнение, дополнение, стилевые правки, оформление, викификация
Нет описания правки
(уточнение, дополнение, стилевые правки, оформление, викификация)
{{другое значение|По [[Википедия:Именование статей/Технические ограничения|техническим причинам]] _Bool перенаправляется сюда. О _Bool можно прочитать здесь: [[stdbool.h]].}}
 
'''ЛогическийЛоги́ческий тип да́нных''', или булев тип, или булевый тип (от {{lang-en|Boolean}} или ''logical data type'') тип данных — примитивный [[тип данных]] в [[информатика|информатике]], который может приниматьпринимающий два возможных значения, иногда называемых ''истиной'' (''true'') и ''ложью'' (''false''). Присутствует в подавляющем большинстве языков программирования как самостоятельная сущность или реализуется через численный тип данных. В подавляющемнекоторых большинствеязыках языковпрограммирования за истинузначение ''истина'' полагается единица1, за значение ''ложь'' — ноль0.
 
Название типа Boolean получило своё название в честь английского математика и логика [[Буль, Джордж|Джорджа Буля]], среди прочего, занимавшегося вопросами математической логики в середине [[XIX век|19 века]].
 
== Реализация ==
Булев тип данных может быть реализован и храниться в памяти с использованием только одного [[бит]]а, но обычно используется минимальная адресуемая ячейка памяти (обычно [[байт]]) или [[машинное слово]]), как более эффективная с точки зрения быстродействия единица работыхранения при работе с [[Регистр процессора|регистрами процессора]] и [[Оперативная память|оперативной памятью]].
 
== Доступные операции с этим типом данных ==
К этому типу данных применимы следующие операции, в скобках указаны символические обозначения операций в некоторых популярных языках программирования:
* ''И'' (логическое умножение) (<code>AND</code>, <code>&</code>, <code>*</code>),
* ''ИЛИ'' (логическое сложение) (<code>OR</code>, <code>|</code>, <code>+</code>),
* ''сравнение'' (<code>&gt;</code>, <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;=</code>)
 
Так жеТакже могут использоваться и другие операции [[Булева алгебра|булевой алгебры]], например, [[стрелка Пирса]] или [[штрих Шеффера]]. Большинство языков программирования позволяют использовать булев тип переменных и констант и в арифметических операциях, предварительно приводя его к численному типу, согласно принятым в языке правилам приведенияпреобразования типов.
 
== Применение ==
Традиционным применением булева типа данных являются значения «да»/«нет» в отношении результата сравнение чисел в более сложных операцийоперациях.
 
Все операции сравнения двух величин — вещественных и целых переменных или константы с переменной (равно, больше, меньше), операциифункции проверки принадлежности вхождения некоторого элемента в множество и проверка на пересечениенепустоту пересечения множеств возвращают в качестве результата булев тип.
 
== Реализация в различных языках программирования ==
 
=== C ===
В [[Си (язык программирования)|языке программирования C]], который не предоставлял булевых значений в [[Си (язык программирования)#ANSI C и ISO C|C89]] (но вводит в [[Си (язык программирования)#C99|C99]]) вместо значений true/false было установлено сравнение значения с нулём. Для примера, код:
 
<source lang='c'>
</source>
 
равнозначен коду:
 
<source lang='c'>
=== Python ===
В языке [[Python]] булев тип данных обозначается как <code>bool</code>, для приведения других типов данных к булеву существует функция <code>bool()</code>, работающая по следующим соглашениям:
* строки: пустая строка — ложь, непустая строка истина.;
* числа: нулевое число — ложь, ненулевое число (в том числе и меньшее единицы) — истина.;
* списки и кортежи: пустой список (кортеж) — ложь, непустой (даже содержащий один элемент, например пустой кортеж) — истина.;
* функции — всегда истина.
 
Для других объектов результат рассчитывается через метод ''__nonzero__'', который в идеале должен возвращать значения True/ или False.
 
Булев тип приводится к следующим типам данных:
* строковый: 'True' для истины, 'False' для лжи.;
* числовой (встроенные типы int, long, float): 1 для истины, 0 для лжи.
 
К другим типам данных булев тип не приводится.
 
В [[Python]] 2.6 есть интересная особенность  — можно переопределить значение True на False и наоборот, написав всего лишь:
 
<source lang='python'>
True = False
__builtins__.True = False
</source>
 
что может привести к весьма неожиданному поведению интерпретатора или IDLE. В python 3 данная возможность была ликвидирована  — True и False считаются зарезервированными, как и слово None.
 
=== Pascal ===
Описание переменных:
 
<source lang='pascal'>
var a, b : Boolean
</source>
 
АрифметическихАрифметические операцийоперации над булевыми нетнедопустимы, но допустимы логические операции: Not, And, Or, Xor, операции отношения = (равно), <> (не равно) и функции Ord, Pred, Succ.
 
<source lang='pascal'>