~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 9D85111734ED95BAC56602AE98034EDB__1715963940 ✰
Заголовок документа оригинал.:
✰ Boolean data type - Wikipedia ✰
Заголовок документа перевод.:
✰ Логический тип данных — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Boolean_variable ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/9d/db/9d85111734ed95bac56602ae98034edb.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/9d/db/9d85111734ed95bac56602ae98034edb__translat.html ✰
Дата и время сохранения документа:
✰ 12.06.2024 06:49:46 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 17 May 2024, at 19:39 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Логический тип данных — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии
(Перенаправлено из логической переменной )

В информатике Boolean ) , (иногда сокращается до Bool) — это тип данных который имеет одно из двух возможных значений (обычно обозначаемых true и false который предназначен для представления двух значений истинности логики , и булевой алгебры . Она названа в честь Джорджа Буля , который впервые определил алгебраическую систему логики в середине 19 века. Тип данных Boolean в первую очередь связан с условными операторами, которые позволяют выполнять различные действия, изменяя поток управления заданное программистом логическое условие в зависимости от того , истинно или ложно . Это частный случай более общего логического типа данных — логика не всегда должна быть логической (см. вероятностную логику ).

Общие сведения [ править ]

В языках программирования со встроенным логическим типом данных, таких как Pascal и Java , операторы сравнения, такие как > и обычно определяются для возврата логического значения. условные и итеративные Для проверки логических выражений можно определить команды.

Языки без явного логического типа данных, такие как C90 и Lisp , могут по-прежнему представлять значения истинности каким-либо другим типом данных. Common Lisp использует пустой список в качестве значения false и любое другое значение в качестве значения true. Язык программирования C использует целочисленный тип, где выражения отношения, такие как i > j и логические выражения, связанные && и || определены как имеющие значение 1, если истинно, и 0, если ложно, тогда как тестовые части if, while, forи т. д., рассматривайте любое ненулевое значение как истинное. [1] [2] Действительно, булева переменная может рассматриваться (и реализовываться) как числовая переменная с одной двоичной цифрой ( битом ) или как битовая строка длиной один, которая может хранить только два значения. Реализация логических значений в компьютерах, скорее всего, представлена ​​в виде полного слова , а не бита; обычно это связано с тем, как компьютеры передают блоки информации.

Большинство языков программирования, даже те, которые не имеют явного логического типа, поддерживают булевы алгебраические операции, такие как конъюнкция ( AND, &, *), дизъюнкция ( OR, |, +), эквивалентность ( EQV, =, ==), исключительная или /неэквивалентность ( XOR, NEQV, ^, !=, ¬) и отрицание ( NOT, ~, !, ¬).

В некоторых языках, таких как Ruby , Smalltalk и Alice, значения true и false принадлежат отдельным классам , например: True и False, соответственно, поэтому не существует одного логического типа .

В SQL , который использует трехзначную логику для явных сравнений из-за специальной обработки Nulls , тип данных Boolean (введенный в SQL:1999 ) также определен как включающий более двух значений истинности, так что логические значения SQL могут хранить все значения. логические значения, полученные в результате оценки предикатов в SQL. Столбец логического типа может быть ограничен только TRUE и FALSE хотя.

Реализации для конкретного языка [ править ]

АЛГОЛ и встроенный тип BOOLEAN [ править ]

Один из первых языков программирования, предоставлявший явное BOOLEAN тип данных — АЛГОЛ 60 (1960 г.) со значениями true и false , а логические операторы обозначаются символами ' ' (и), ' ' (или), ' ' (подразумевается), ' ' (эквивалентность) и ' ' (нет). Однако из-за ограничений на устройства ввода и наборы символов на многих компьютерах того времени большинство компиляторов использовали альтернативные представления для многих операторов, такие как AND или 'AND'.

Этот подход с BOOLEAN как встроенный ( примитивный или иным образом предопределенный) тип данных был принят во многих более поздних языках программирования, таких как Simula 67 (1967), ALGOL 68 (1970), [3] Pascal (1970), Ada (1980), Java (1995) и C# (2000) и другие.

Фортран [ править ]

Первая версия FORTRAN (1957 г.) и ее преемник FORTRAN II (1958 г.) не имеют логических значений или операций; даже условное IFоператор принимает арифметическое выражение и переходит в одно из трех мест в соответствии с его знаком; ЕСЛИ см. арифметику . FORTRAN IV (1962), однако, следует примеру ALGOL 60, предоставляя логический тип данных ( LOGICAL), истинностные литералы ( .TRUE. и .FALSE.), логично IF оператор, логические операторы числового сравнения ( .EQ., .GT.и т. д.) и логические операторы ( .NOT., .AND., .OR., .EQV., и .NEQV.). В FORMAT операторы, определенный дескриптор формата (' L') предназначен для анализа или форматирования логических значений. [4]

Лисп и схема [ править ]

Язык Лисп (1958 г.) никогда не имел встроенного логического типа данных. Вместо этого условные конструкции типа cond предположим, что логическое значение false представлено пустым списком (), который определяется как специальный атом nil или NIL; тогда как любое другое s-выражение интерпретируется как истинное . Для удобства в большинстве современных диалектов Лиспа атом заранее определен. t иметь ценность t, так что t может использоваться как мнемоническое обозначение true .

Этот подход ( в качестве логического значения может быть использовано любое значение ) сохранился в большинстве диалектов Лиспа ( Common Lisp , Scheme , Emacs Lisp ), и подобные модели были приняты многими языками сценариев , даже теми, которые имели отдельный логический тип или логические значения; хотя какие значения интерпретируются как ложные , а какие истинные , варьируются от языка к языку. Например, в Scheme значение false — это атом, отличный от пустого списка, поэтому последний интерпретируется как true . С другой стороны, Common Lisp также предоставляет выделенную boolean тип, полученный как специализация символа. [5]

Паскаль, Ада и Хаскелл [ править ]

Язык Паскаль (1970) популяризировал концепцию определяемых программистом перечислимых типов , ранее доступных с различной номенклатурой в COBOL , FACT и JOVIAL . Встроенный Boolean тип данных затем был предоставлен как предопределенный перечислимый тип со значениями FALSE и TRUE. По определению, все сравнения, логические операции и условные операторы, применяемые к и/или выдающие Booleanценности. В противном случае Booleantype имел все возможности, которые были доступны для перечислимых типов в целом, такие как упорядочивание и использование в качестве индексов. Напротив, преобразование между Booleans и целые числа (или любые другие типы) по-прежнему требовали явных тестов или вызовов функций, как в АЛГОЛе 60. Этот подход ( Boolean — перечислимый тип ) был принят большинством более поздних языков, в которых были перечисляемые типы, таких как Modula , Ada и Haskell. .

C, C++, D, Objective-C, AWK [ править ]

Первоначальные реализации языка C (1972 г.) не предоставляли логический тип, и по сей день логические значения обычно представляются целыми числами ( ints) в программах на языке C. Операторы сравнения ( >, ==и т. д.) определены для возврата целого числа со знаком ( int) результат: 0 (ложь) или 1 (истина). Логические операторы ( &&, ||, !и т. д.) и операторы проверки условий ( if, while) предположим, что ноль — ложь, а все остальные значения — истина.

После перечислимых типов ( enums) были добавлены к (1989) Американского национального института стандартов версии C, ANSI C , многие программисты C привыкли определять свои собственные логические типы как таковые из соображений удобства чтения. Однако согласно стандартам языка перечислимые типы эквивалентны целым числам; поэтому эффективное тождество между логическими и целыми числами по-прежнему справедливо для программ на языке C.

Стандарт C (начиная с C99 ) предоставляет логический тип, называемый _Bool. Включив заголовок stdbool.h, можно использовать более интуитивное имя bool и константы true и false. Язык гарантирует, что любые два истинных значения будут сравниваться равными (чего было невозможно достичь до введения типа). Логические значения по-прежнему ведут себя как целые числа, могут храниться в целочисленных переменных и использоваться везде, где допустимы целые числа, в том числе при индексировании, арифметике, синтаксическом анализе и форматировании. Этот подход ( логические значения — это просто целые числа ) был сохранен во всех более поздних версиях C. Обратите внимание, что это не означает, что любое целочисленное значение может быть сохранено в логической переменной.

В C++ есть отдельный тип данных Boolean. bool, но с автоматическими преобразованиями из скалярных значений и значений указателей, которые очень похожи на преобразования в C. Этот подход был принят также во многих более поздних языках, особенно в некоторых языках сценариев, таких как AWK .

Язык программирования D имеет правильный логический тип данных. bool. booltype — это тип размером в байт, который может содержать только значения true или false. Единственные операторы, которые могут принимать операнды типа bool: &, |, ^, &=, |=, ^=, !, &&, || и ?:. А boolзначение может быть неявно преобразовано в любой целочисленный тип, при этом значение false становится равным 0, а значение true — 1. Числовые литералы 0 и 1 могут быть неявно преобразованы в логические значения false и true соответственно. Приведение выражения к bool означает проверку на 0 или !=0 для арифметических типов и на значение null или !=null для указателей или ссылок.

Objective-C также имеет отдельный логический тип данных. BOOL, с возможными значениями YES или NO, эквиваленты true и false соответственно. [6] Кроме того, в компиляторах Objective-C, поддерживающих C99, C _Bool type можно использовать, поскольку Objective-C является надмножеством C.

Ява [ править ]

В Java значение boolean тип данных может быть только true или false. [7]

Перл и Lua [ править ]

В Perl нет логического типа данных. Вместо этого любое значение может вести себя как логическое значение в логическом контексте (условие if или while утверждение, аргумент && или ||, и т. д.). Номер 0, струны "0" и "", пустой список (), и особое значение undef оценить как ложь. [8] Все остальное оценивается как true.

Lua имеет логический тип данных, но нелогические значения также могут вести себя как логические значения. Неценность nilоценивается как false, тогда как значение любого другого типа данных оценивается как true. Сюда входит пустая строка "" и число 0, которые очень часто считают false на других языках.

ПЛ/И [ править ]

PL/I не имеет логического типа данных. Вместо этого операторы сравнения генерируют значения BIT(1); '0'B представляет ложь , а '1'B представляет истину . Операнды, например, &, |, ¬, преобразуются в битовые строки, и операции выполняются над каждым битом. Элемент - выражение IF утверждение истинно, если какой-либо бит равен 1.

Рекс [ править ]

Rexx не имеет логического типа данных. Вместо этого операторы сравнения генерируют 0 или 1; 0 представляет ложь , а 1 представляет истину . Операнды, например, &, |, ¬, должно быть 0 или 1.

ТКЛ [ править ]

Tcl не имеет отдельного логического типа. Как и в C, используются целые числа 0 (ложь) и 1 (истина — фактически любое ненулевое целое число). [9]

Примеры кодирования:

 установить   v   1, 
  если   {   $v   }   {   помещает   «V равно 1 или истинно»   } 

Вышеупомянутое покажет V равно 1 или правда поскольку выражение оценивается как 1.

 установите   v   "" 
  if   {   $v   }   ....
 

Вышеупомянутое приведет к ошибке, поскольку переменная v не может быть оценен как 0 или 1.

Python, Ruby и JavaScript [ править ]

Python , начиная с версии 2.3, имеет bool тип, который подклассом является int, стандартный целочисленный тип. [10] Он имеет два возможных значения: True и False, которые являются специальными версиями 1 и 0 соответственно и ведут себя соответствующим образом в арифметическом контексте. Кроме того, числовое значение нуля (целое или дробное), нулевое значение ( None), пустая строка и пустые контейнеры (списки, наборы и т. д.) считаются логическими значениями false; все остальные значения по умолчанию считаются логическими истинными. [11] Классы могут определять, как их экземпляры обрабатываются в логическом контексте с помощью специального метода. __nonzero__ (Питон 2) или __bool__(Питон 3). Для контейнеров, __len__ (специальный метод определения длины контейнеров) используется, если не определен явный логический метод преобразования.

В Ruby , напротив, только nil (нулевое значение Ruby) и специальный falseобъект ложный ; все остальное (включая целое число 0 и пустые массивы) истинно .

В JavaScript пустая строка ( ""), null, undefined, NaN, +0, −0 и false[12] иногда называются ложными которых ( дополнением является true ), чтобы различать логические значения со строгой проверкой типов и принудительные логические значения. [13] В отличие от Python, пустые контейнеры (массивы, карты, наборы) считаются правдивыми. Такие языки, как PHP, также используют этот подход.

SQL [ править ]

Логические значения появляются в SQL, когда необходимо условие , например Предложение WHERE в форме предиката, который создается с помощью таких операторов, как операторы сравнения, IN , оператор IS (NOT) NULL и т. д. Однако, кроме ПРАВДА и FALSE , эти операторы также могут возвращать третье состояние, называемое НЕИЗВЕСТНО , при сравнении с NULL сделан.

Представлен стандарт SQL92 ЕСТЬ (НЕ) ИСТИНА, ЕСТЬ (НЕ) ЛОЖЬ и Операторы IS (NOT) UNKNOWN, которые оценивают предикат, который появился до введения логического типа в SQL:1999 .

Стандарт SQL:1999 представил Тип данных BOOLEAN как дополнительная функция (T031). При ограничении Ограничение NOT NULL , SQL BOOLEAN ведет себя как логические значения в других языках, которые могут хранить только ПРАВДА и ЛОЖНЫЕ ценности. Однако, если он допускает значение NULL, что является значением по умолчанию, как и все другие типы данных SQL, он также может иметь специальное значение NULL. Хотя стандарт SQL определяет три литерала для БУЛЕВЫЙ тип – ИСТИНА, ЛОЖЬ и НЕИЗВЕСТНО — здесь также говорится, что НУЛЬ БУЛЕВОЕ и НЕИЗВЕСТНО «может использоваться взаимозаменяемо и означать одно и то же». [14] [15] Это вызвало некоторые разногласия, поскольку субъекты идентификации НЕИЗВЕСТНО к правилам сравнения равенства для NULL. Точнее UNKNOWN = UNKNOWN не является ПРАВДА , но НЕИЗВЕСТНО/НОЛЬ . [16] По состоянию на 2012 год лишь немногие основные системы SQL реализуют функцию T031. [17] Firebird и PostgreSQL являются заметными исключениями, хотя PostgreSQL не реализует никаких НЕИЗВЕСТНЫЙ литерал; NULL вместо этого можно использовать. [18]

Обработка логических значений различается в разных системах SQL.

Например, в Microsoft SQL Server логическое значение вообще не поддерживается ни как отдельный тип данных, ни как целое число. Он показывает сообщение об ошибке «Выражение нелогического типа, указанное в контексте, где ожидается условие», если столбец напрямую используется в Предложение WHERE , например SELECT a FROM t WHERE a, в то время как такое утверждение, как SELECT column IS NOT NULL FROM tвыдает синтаксическую ошибку. Тип данных BIT , который может хранить только целые числа 0 и 1, кроме NULL обычно используется в качестве обходного пути для хранения логических значений, но необходимо использовать обходные пути, такие как UPDATE t SET flag = IIF(col IS NOT NULL, 1, 0) WHERE flag = 0 для преобразования между целым числом и логическим выражением.

Microsoft Access , который использует ядро ​​базы данных Access (ACE/JET), [19] также не имеет логического типа данных. Подобно MS SQL Server, он использует BIT . Тип данных [20] В Access он известен как тип данных «Да/Нет». [21] который может иметь два значения; Да (Правда) или Нет (Ложь). Тип данных BIT в Access также может быть представлен в числовом виде; Истина равна −1, а Ложь равна 0. [22] Он отличается от MS SQL Server двумя способами, хотя оба являются продуктами Microsoft:

  1. Доступ представляет собой ИСТИНА как -1, тогда как в SQL Server она равна 1.
  2. Access не поддерживает три состояния Null, поддерживаемые SQL Server.

PostgreSQL имеет отличительную особенность BOOLEAN тип, как в стандарте, [23] который позволяет хранить предикаты непосредственно в BOOLEAN- столбец и позволяет использовать BOOLEAN- столбец непосредственно в качестве предиката в Пункт ГДЕ .

В MySQL , BOOLEAN рассматривается как псевдоним TINYINT(1); [24] ИСТИНА совпадает с целым числом 1 и ЛОЖЬ — это то же самое, что и целое число 0. [25] Любое ненулевое целое число истинно в условиях.

Таблица [ править ]

Программное обеспечение Tableau имеет тип данных BOOLEAN. [26] Литерал логического значения: True или False. [27]

Таблица INT() Функция преобразует логическое значение в число, возвращая 1 для True и 0 для False. [28]

Далее [ править ]

Форт (язык программирования) не имеет логического типа, он использует обычные целые числа: значение 0 (все младшие биты) представляет ложь, а -1 (все старшие биты) представляет истину. Это позволяет языку определять только один набор логических операторов вместо одного для математических вычислений и одного для условий. [29]

См. также [ править ]

Ссылки [ править ]

  1. ^ Керниган, Брайан В .; Ричи, Деннис М (1978). Язык программирования C (1-е изд.). Энглвуд Клиффс, Нью-Джерси : Прентис Холл . п. 41 . ISBN  0-13-110163-3 .
  2. ^ Плаугер, Пи Джей ; Броди, Джим (1992) [1989]. Справочник программиста C по стандартам ANSI и ISO . Майкрософт Пресс . стр. 86–93 . ISBN  1-55615-359-7 .
  3. ^ «Отчет об алгоритмическом языке АЛГОЛ 68, раздел 10.2.2» (PDF) . Август 1968 года. Архивировано (PDF) из оригинала 6 апреля 2008 года . Проверено 30 апреля 2007 г.
  4. ^ Digital Equipment Corporation, Справочное руководство для программистов DECSystem10 FORTRAN IV . Перепечатано в Справочнике по математическим языкам . Онлайн-версия. Архивировано 14 августа 2011 г. на Wayback Machine, доступ осуществлен 16 ноября 2011 г.
  5. ^ «CLHS: Тип BOOLEAN» .
  6. ^ «Руководства и пример кода» . разработчик.apple.com . Архивировано из оригинала 7 сентября 2011 года . Проверено 1 мая 2018 г.
  7. ^ «Явские логические значения» . Интернет-руководства W3Schools . Проверено 17 февраля 2021 г.
  8. ^ "perlsyn — Синтаксис Perl/Правда и ложь" . Архивировано из оригинала 26 августа 2013 года . Проверено 10 сентября 2013 г.
  9. ^ «PEP 285 — Добавление типа bool» . 4 мая 2011 г. Архивировано из оригинала 28 марта 2018 г. . Проверено 28 марта 2018 г.
  10. ^ ван Россум, Гвидо (3 апреля 2002 г.). «PEP 285 — Добавление типа bool» . Архивировано из оригинала 1 мая 2013 года . Проверено 15 мая 2013 г.
  11. ^ «Выражения» . Документация Python v3.3.2 . Архивировано из оригинала 22 мая 2013 года . Проверено 15 мая 2013 г.
  12. ^ «Спецификация языка ECMAScript» (PDF) . п. 43. Архивировано из оригинала (PDF) 12 апреля 2015 г. Проверено 12 марта 2011 г.
  13. ^ «Элементы стиля JavaScript» . Дуглас Крокфорд. Архивировано из оригинала 17 марта 2011 года . Проверено 5 марта 2011 г.
  14. ^ С. Дата (2011). SQL и реляционная теория: как писать точный код SQL . О'Рейли Медиа, Инк. с. 83. ИСБН  978-1-4493-1640-2 .
  15. ^ ИСО/МЭК 9075-2:2011 §4.5
  16. ^ Мартин Пригмор (2007). Введение в базы данных с веб-приложениями . Пирсон Образования Канады. п. 197. ИСБН  978-0-321-26359-9 .
  17. ^ Троэлс Арвин, Обзор реализации типа данных BOOLEAN. Архивировано 9 марта 2005 г. на Wayback Machine.
  18. ^ «PostgreSQL: Документация: 10: 8.6. Логический тип» . www.postgresql.org . Архивировано из оригинала 9 марта 2018 года . Проверено 1 мая 2018 г.
  19. ^ «Миграция базы данных Access на SQL Server» . support.microsoft.com . Проверено 19 октября 2020 г.
  20. ^ о365devx. «Типы данных SQL (Справочник по базе данных Access Desktop)» . docs.microsoft.com . Проверено 19 октября 2020 г. {{cite web}}: CS1 maint: числовые имена: список авторов ( ссылка )
  21. ^ «Введение в типы данных и свойства полей» . support.microsoft.com . Проверено 19 октября 2020 г.
  22. ^ «Логические данные — Учебное пособие по MS-Access» . sourcedaddy.com . Проверено 19 октября 2020 г.
  23. ^ «Булев тип» . 27 октября 2016 г.
  24. ^ «MySQL :: Справочное руководство MySQL 8.0 :: 12.1.1 Обзор числовых типов» . dev.mysql.com . Архивировано из оригинала 22 сентября 2016 г.
  25. ^ «MySQL :: Справочное руководство MySQL 8.0 :: 9.1.6 Логические литералы» . dev.mysql.com .
  26. ^ "Типы данных" . help.tableau.com . Проверено 19 октября 2020 г.
  27. ^ «Форматирование вычислений в таблице» . help.tableau.com . Проверено 19 октября 2020 г.
  28. ^ «Boolean делает Tableau быстрее — правда или ложь?» . ТАР Решения . 11 сентября 2020 г. Проверено 19 октября 2020 г.
  29. ^ «4. Решения, решения...» Forth Inc. 11 февраля 2022 г. Проверено 11 февраля 2022 г.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 9D85111734ED95BAC56602AE98034EDB__1715963940
URL1:https://en.wikipedia.org/wiki/Boolean_variable
Заголовок, (Title) документа по адресу, URL1:
Boolean data type - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)