WikiSort.ru - Программирование

ПОИСК ПО САЙТУ | о проекте

Логи́ческий тип да́нных, или булев тип, или булевый тип (от англ. 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, long, 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» или пустая строка, что часто является неожиданностью для новичков.

См. также

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии