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

22 0 Новини високих технологій

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

Логічний тип даних в інформатиці
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.


    <script type="text/javascript">
    var blockSettings2 = {blockId:"R-A-271049-5",renderTo:"yandex_rtb_R-A-70350-39",async:!0};
    if(document.cookie.indexOf("abmatch=") >= 0) blockSettings2.statId = 70350;
    !function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings2)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/javascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");

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

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

      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.


    <script type="text/javascript">
    var blockSettings3 = {blockId:"R-A-271049-6",renderTo:"yandex_rtb_R-A-70350-44",async:!0};
    if(document.cookie.indexOf("abmatch=") >= 0) blockSettings3.statId = 70350;
    !function(a,b,c,d,e){a[c]=a[c]||[],a[c].push(function(){Ya.Context.AdvManager.render(blockSettings3)}),e=b.getElementsByTagName("script")[0],d=b.createElement("script"),d.type="text/javascript",d.src="//an.yandex.ru/system/context.js",d.async=!0e.parentNode.insertBefore(d,e)}(this,this.document,"yandexContextAsyncCallbacks");

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

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