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

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

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

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 підтримує кілька операцій, ми розберемо такі:

  • ЛОГІЧНЕ І (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 або порожній рядок теж вважається ІСТИНОЮ, і це може викликати труднощі у людей, які починають вивчати цю мову.

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