Логічний тип

За технічних причин _Bool перенаправляється сюди. Про _Bool можна прочитати тут: stdbool.h.

Логічний, булеві ( англ. Boolean або logical data type) тип даних - примітивний тип даних в інформатиці, які можуть приймати два можливих значення, іноді званих правдою (true) і брехнею (false). Присутній в переважній більшості мов програмування як самостійна сутність або реалізується через чисельний тип. У переважній більшості мов за істину покладається одиниця, за брехню - нуль.

Назва Boolean отримало свою назву на честь англійського математика і логіка Джорджа Буля, серед іншого, займався питаннями математичної логіки в середині 19 століття.


1. Реалізація

Булева тип даних може бути реалізований з використанням тільки одного біта, але зазвичай використовується мінімальна адресуемая комірка пам'яті ( байт) або машинне слово, як ефективна одиниця роботи з регістрами і оперативною пам'яттю.

2. Доступні операції

До цього типу даних застосовні наступні операції:

  • І (логічне множення) ( AND, &, *),
  • АБО (логічне додавання) ( OR, |, +),
  • виключає АБО (множення з переносом) ( xor, NEQV, ^),
  • еквівалентність (рівність) ( EQV, =, ==)
  • інверсія ( NOT, ~, !)
  • порівняння ( >, <, <=, >=)

Так само можуть використовуватися й інші операції булевої алгебри. Більшість мов програмування дозволяють використовувати булеві тип і в арифметичних операціях, приводячи його до чисельного типу згідно з прийнятими в мові правилам приведення типів.


3. Застосування

Традиційним застосуванням булева типу даних є значення "так" / "ні" щодо результату більш складних операцій.

Всі операції порівняння двох величин (дорівнює, більше, менше), операції входження елемента в безліч і перевірка на перетин множин повертають у якості результату булеві тип.

4. Реалізація в різних мовах програмування

4.1. 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.


4.2. Algol

Algol 60 має тип даних boolean і відповідні оператори, встановлені в специфікації Algol 60. Тип даних був скорочений до bool в ALGOL 68.

4.3. 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) були наближеними до інструкції на екрані десятковим значенням і це давало помилки при порівнянні. Традиційно, ціле містило одну (або більше) булеву змінну (одну на кожний розряд цілого).


4.4. 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.


4.5. 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  . 

4.6. Ruby

В Ruby булеві тип представлений двома зумовленими змінними : true і false. З'являється логічний тип в результаті логічних операцій або виклику логічних методів. За традицією, ім'я логічних методів (тобто методів, які повертають значення true або false) закінчується на "?".

В якості false може виступати null, а в якості true - будь об'єкт, у тому числі змінна зі значенням "0" або порожня рядок, що часто є несподіванкою для новачків.

Перегляд цього шаблону Типи даних
Неінтерпретіруемие
Числові
Текстові
Покажчик

Адреса Посилання

Композитні
Інші

Логічний Нижчий тип Колекція Перераховуються тип Виняток First-class function Opaque data type Recursive data type Семафор Потік Вищий тип Type class Unit type Void

Пов'язані теми