Новини високих технологій
» » Логічний тип даних в інформатиці

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

29-12-2018, 20:22
1 562
Типів даних в інформатиці безліч. Вони поділяються на посилальні типи і типи значень. Типи значень працюють зазвичай швидше, тому що зберігаються в стеку і управляються безпосередньо. Це чисельні змінні та логічні типи даних. Посилальні зберігають у стеку посилання на купу, а в купі вже знаходиться реалізація типу. Посилальні типи даних — це рядкові змінні, динамічні або глобальні змінні, вбудовані або користувальницькі класи.
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/jаvascript">
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/jаvascript",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/jаvascript">
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/jаvascript",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 або порожній рядок теж вважається ІСТИНОЮ, і це може викликати труднощі у людей, початківців вивчати цю мову. Операції з логічними типами даних можуть незначно відрізнятися в залежності від мови. Тому завжди необхідно знайомитися з тонкощами використання типів даних в мові, що вивчається, щоб не мати труднощів у подальшому застосуванні.
Цікаво по темі
Оператори Python і їх пріоритет виконання
Оператори Python і їх пріоритет виконання
Оператори описують дія над змінними - операндами. Визначають порядок виконання операцій. Операції з високим пріоритетом виконуються першими. Крім
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в "Сі". Програмування на мові Сі"
Типи даних в Сі - клас даних, значення яких мають схожі характеристики. Тип визначає внутрішнє подання даних у пам'яті. Основні типи даних: логічний,
Функція Random C++
Функція Random C++
Починаючи з версії C++11 у стандарті мови були значно розширені засоби для роботи з випадковими числами (далі, СЧ). СЧ використовуються в багатьох
Перевантаження операторів в С++: основи, приклади
Перевантаження операторів в С++: основи, приклади
У будь-якій науці є стандартні позначення, які полегшують розуміння ідей. Наприклад, в математиці це множення, ділення, додавання і інші символьні
Що таке динамічні масиви C++?
Що таке динамічні масиви C++?
Визначимося для початку з тим, що таке динамічний масив. З часів Сі існують масиви, але їх особливістю був фіксований розмір, який зазначався при
Як здійснити запис у файл Java
Як здійснити запис у файл Java
При написанні програм на мові Java рано чи пізно постане необхідність читання і запису інформації в файл. Для цього в мові передбачені наступні