Interested Article - Логический тип

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

См. также

Источник —

Same as Логический тип