Типів даних в інформатиці безліч. Вони поділяються на посилальні типи і типи значень. Типи значень працюють зазвичай швидше, тому що зберігаються в стеку і управляються безпосередньо. Це чисельні змінні та логічні типи даних. Посилальні зберігають у стеку посилання на купу, а в купі вже знаходиться реалізація типу. Посилальні типи даних — це рядкові змінні, динамічні або глобальні змінні, вбудовані або користувальницькі класи.
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 або порожній рядок теж вважається ІСТИНОЮ, і це може викликати труднощі у людей, початківців вивчати цю мову.
Операції з логічними типами даних можуть незначно відрізнятися в залежності від мови. Тому завжди необхідно знайомитися з тонкощами використання типів даних в мові, що вивчається, щоб не мати труднощів у подальшому застосуванні.