Логический тип данных в информатике

Типов данных в информатике великое множество. Они подразделяются на ссылочные типы и типы значений. Типы значений работают обычно быстрее, потому что хранятся в стеке и управляются напрямую. Это численные переменные и логические типы данных. Ссылочные хранят в стеке ссылку на кучу, а в куче уже находится реализация типа. Ссылочные типы данных — это строковые переменные, динамические или глобальные переменные, встроенные или пользовательские классы.

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 или пустая строка тоже считается ИСТИНОЙ, и это может вызвать затруднения у людей, начинающих изучать этот язык.

Операции с логическими типами данных могут незначительно отличаться в зависимости от языка. Поэтому всегда необходимо знакомиться с тонкостями использования типов данных в изучаемом языке, чтобы не иметь трудностей в дальнейшем применении.

Комментарии