Логічний тип даних в інформатиці

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

2 листопада 1815 року в Англії народився чоловік, який став відомим математиком і логіком. Саме на честь нього названо один з типів даних в програмуванні — Boolean, логічний тип даних.

Тип даних boolean — це «примітивний» тип. Поширений він повсюдно: використовувався в мові програмування Algol 60 (1960-ті), Fortran, Pascal, C++, є у всіх сучасних мовах програмування. Булева змінна чудова тим, що має тільки два значення: ІСТИНА (true, 1) або FALSE (хибність, 0). Зазвичай реалізується через числовий тип даних, більш того, більшість мов програмування дозволяють використовувати її і в арифметичних операціях, попередньо привівши до чисельного типу, виходячи з правил приведення типів для конкретної мови програмування.

Низький рівень

Булевий) тип даних — це значимий тип. В ОЗП змінні типу bool зберігаються в стеку, тобто обіг та розміщення такої змінної відбувається дуже швидко.

Легко припустити, що для реалізації такого простого типу достатньо 1 біт (0 або 1), але на ділі з-за особливостей архітектури процесорів під логічний тип даних резервується мінімальна адресується комірка пам’яті – байт, а якщо точніше вказувати, то машинне слово. Це полегшує роботу процесора і ОПЕРАТИВНОЇ пам’яті. Наприклад:

00000000 — false

00000001 або 00010001 або 100000 – true

Але при виконанні присвоювання в булеву змінну значення ІСТИНА в машинному коді завжди записується значення 00000001.

Логічний тип даних. Логічні операції

У поширених мовах програмування тип boolean підтримує 6 операцій, ми розберемо наступні:

  • ЛОГІЧНЕ І (AND && *).
  • ЛОГІЧНЕ АБО (OR | +).
  • ВИКЛЮЧАЄ АБО (XOR ^).
  • РІВНІСТЬ (EQV ==).
  • НЕРАВЕСТВНО (NOT !=).
  • ОПЕРАЦІЇ ПОРІВНЯННЯ (> < <= >=).

Булеві типи даних. Приклади. Логічне І

Оператор && повертає істину, якщо обидва аргументи є істиною.

using System;

namespace Boolean
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(true&&false);
Console.ReadLine();
}
}
}

В даному прикладі друга умова — БРЕХНЯ, значить, в консоль виведеться false.

Логічне АБО

Оператор || повертає істину, якщо хоча б один з аргументів є істиною.

using System;

namespace Boolean
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(true||false);
Console.ReadLine();
}
}
}

В даному прикладі одна з умов — ІСТИНА, отже, в консоль виведеться true.

Виключне АБО

Оператор ^ (не плутати з возведенням в ступінь) повертає істину, якщо тільки один з аргументів є істиною.

using System;

namespace Boolean
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(true^true);
Console.ReadLine();
}
}
}

В даному прикладі обидва аргументи-істинні, значить, в консоль виведеться false.

Рівність і нерівність

Оператор == повертає істину, якщо обидва умови рівні. Оператор != повертає істину, якщо обидві умови не рівні.

using System;

namespace Boolean
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(true!=false);
Console.ReadLine();
}
}
}

В консолі буде true, тому що умова виконується.

Вище були розглянуті приклади на мові C#. У цій мові для операцій логічного типу визначені два значення — true і false. І тут забороняється перетворювати булеві значення в цілочисельні, компілятор видасть помилку. Як нескладно помітити, при передачі в метод WriteLine класу Console булевої змінної на консоль виводиться її значення.

Також булева змінна може керувати оператором if. Якщо умова виконання вирази з if — істинність змінної, то вираз можна скоротити до:

if(x) {/*…do smth…*/}

Операції порівняння

Оператори >= <= > < можуть використовувати будь-які числові типи даних, включаючи булеві.

У мові C, якщо змінна містить 0, то її булевое значення еквівалентно БРЕХНЯ, і навпаки, будь-яке число трактується як ІСТИНА. Для кращого розуміння нижче наведено фрагмент коду:

if (bool_variable) printf(“True!n”); else printf(“False!n”)

В C відсутнє поняття логічного типу даних, замість нього використовуються числові типи, в основному integer. Тому в логічних операціях будь-який операнд числового типу, що має значення, не рівне нулю, інтерпретується як ІСТИНА, а результатом логічних операцій є цілі числа, один і нуль відповідно. В C++ був введений логічний тип даних, але скоріше для зручності роботи. Він ніяк не впливає на використання інших типів логічних виразах, як і в C.

Порядок виконання операторів логічних типів даних відбувається зліва направо. Наприклад, обчислення виразу

var x && var y && var z

зупиниться, як тільки виявиться перший операнд у значенні БРЕХНЯ, а обчислення

var x || var y || var z

буде виконуватися, поки компілятор не зустріне перше справжнє значення.

Паскаль

У різних мовах програмування тонкощі роботи булевими операторами змінними можуть трохи відрізнятися. Логічний тип даних в Паскалі, наприклад, має цікаву особливість: тут можна порівнювати ІСТИНУ і БРЕХНЮ, причому БРЕХНЯ менше ІСТИНИ. Також значенню БРЕХНЯ відповідає нулю, а значення ІСТИНА – будь-яке число, відмінне від нуля.

Access допоможе

Логічний тип даних в Access працює за схожими принципами.

  • ЛОГІЧНЕ І And.
  • ЛОГІЧНЕ АБО Or.
  • РІВНІСТЬ Eqv.
  • НЕРІВНІСТЬ Not.
  • ВИКЛЮЧНЕ АБО Xor.

Виконуються вони так само, як і в інших популярних мовах програмування.

Python

В мові Python логічний тип даних оголошується стандартно — bool. Щоб приводити інші типи до булеву типу, використовується функція bool():

  • Порожній рядок — БРЕХНЯ, не пустий — ІСТИНА.
  • Нуль — БРЕХНЯ, будь-яке число, відмінне від нуля — ІСТИНА.
  • Порожній масив — БРЕХНЯ, непорожній — ІСТИНА.
  • Функція — ІСТИНА.

Це всі типи даних, до яких можна привести булев тип в Python.

Ruby

У значенні БРЕХНЯ виступає nil, а ІСТИНОЮ може бути будь-який об’єкт. Причому змінна зі значенням 0 або порожній рядок теж вважається ІСТИНОЮ, і це може викликати труднощі у людей, початківців вивчати цю мову.

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