Диапазоны типов данных
32-разрядные и 64-разрядные компиляторы Microsoft C++ распознают типы в таблице далее в этой статье.
Если имя начинается с двух символов подчеркивания ( __ ), тип данных является нестандартным.
Диапазоны, представленные в следующей таблице, включают указанные значения.
В зависимости от характера использования переменная типа __wchar_t обозначает расширенный символьный или многобайтовый символьный тип. Чтобы указать константу расширенного символьного типа, перед символьной или строковой константой следует использовать префикс L .
signed и unsigned — это модификаторы, которые можно использовать с любым целочисленным типом, кроме типа bool . Обратите внимание, что char , signed char и unsigned char — это три разных типа, предназначенных для механизмов, подобных перегрузке и шаблонам.
Размер типов int и unsigned int — 4 байта. Однако переносимый код не должен зависеть от размера int , поскольку языковой стандарт позволяет варьировать его в зависимости от реализации.
C и C++ в Visual Studio также поддерживают целочисленные типы с указанием размера. Дополнительные сведения см. в разделе __int8, __int16, __int32, __int64 и ограничения целых чисел.
Дополнительные сведения об ограничениях размеров каждого типа см. в разделе «Встроенные типы».
Диапазон перечисляемых типов зависит от контекста языка и указанных флажков компилятора. Дополнительные сведения см. в статьях Объявления перечислений C и Объявления перечислений C++.
Boolean (Булев, Логический тип данных)
Boolean (Булев, Логический тип данных) — примитивный тип данных в информатике, которые могут принимать два возможных значения, иногда называемых истиной ( true ) и ложью ( false ). Например, в JavaScript Булевы состояния часто используются для того, чтобы определить какие части кода выполнять (например, в операторах if) или повторять (например, циклы for).
Ниже приведён некоторый псевдокод JavaScript (это не действительно исполняемый код), демонстрирующий эту концепцию.
Пример использования оператора if :
if (условие) < блок кода, выполняемый если условие возвращает true >else
if (hour 18) greeting = "Добрый день"; > else greeting = "Добрый вечер"; >
Пример использования логического условия в цикле for :
for (начало; условие; шаг) < // . тело цикла . >
for (let i = 0; i 3; i++) alert(i); >
Булевы значения названы в честь английского математика Джорджа Буля, который был первопроходцем в области математической логики.
Смотрите также
Техническая справка
- Глобальный объект JavaScript: Boolean
- Типы данных JavaScript и структуры данных
Found a content problem with this page?
- Edit the page on GitHub.
- Report the content issue.
- View the source on GitHub.
This page was last modified on 12 нояб. 2023 г. by MDN contributors.
Your blueprint for a better internet.
MDN
Support
- Product help
- Report an issue
Our communities
Developers
- Web Technologies
- Learn Web Development
- MDN Plus
- Hacks Blog
- Website Privacy Notice
- Cookies
- Legal
- Community Participation Guidelines
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998– 2023 by individual mozilla.org contributors. Content available under a Creative Commons license.
bool
Логический тип представлен двумя постоянными значениями False и True . Значения используются для представления истинности.
my_bool_true = True
my_bool_true = bool(10)
my_bool_true = bool('some')
my_bool_false = False
my_bool_false = bool(0)
my_bool_false = bool('')
my_bool_false = bool()
Тип bool не позволяет наследоваться. Его единственные экземпляры — False и True .
Если рассматривать эти значения в числовом контексте (например, когда они используются как аргументы в арифметической операции), то ведут они себя как целые 0 и 1 соответственно.
На заметку
Данный тип является подтипом целого (int).
isinstance(True, int) # True
isinstance(False, int) # True
issubclass(bool, int) # True
Конструктор типа bool(x) может использоваться для приведения любого значения к логическому типу (если, конечно, это значение можно интерпретировать как логический тип). Если аргумент *x* ложь, или опущен вернётся False .
На заметку
Для пользовательского объекта реализовать поведение при проверке на его истинность можно в методе __bool__.
Когда переменная bool не true и не false одновременно
Недавно читали код и наткнулись на примерно такой такой фрагмент.
bool *t = new bool[X][Y]; // много строк switch (t[M][N]) < case true: // много строк break; case false: // много строк break; default: // много строк break; >
Сразу возникает вопрос: зачем нужна ветка default? Если переменная не равна true, то она равна false. Однокурсник сказал: «Для отладки». Думаю: что тут можно отлаживать? Но не всё так просто.
Запускаю. Выполняется код в ветке default. Самое первое предположение — забыли поставить break. Внимательно перечитываю код — всё в порядке. Запускаю в отладчике и замечаю, что выполняется сразу ветка default, а в ветку true или false даже не заходит. Решаю просмотреть значение переменной. Visual Studio 2012 запущенная на Windows 7 показывает 205. Допустим. Плюсы я стал учить недавно, поэтому решил провести небольшой опыт: создал булевую переменную и присвоил ей 205. Отрабатывает ветка true. Пока я размышлял над этой проблемой, однокурсник нашёл решение этой проблемы: оказывается, массив не был инициализирован. После инициализации проблема исчезла. Теперь у меня возник возник вопрос: неужели проблема в switch? Ради проверки я решил провести следующий опыт.
#include using namespace std; int main() < bool *t = new bool[1]; switch (t[0]) < case true: cout if(t[0] == true) < cout else if(t[0] == false) < cout else < cout if(t[0]) < cout else if(!t[0]) < cout else < cout delete[] t; return 0; >
Вариант с switch или первый вариант с if позволяет определить не инициализированную булевую переменную. Второй вариант с if никогда не заходит в третий вариант.
Как создать такую переменную Шрёдингера? Создайте динамический или статический массив. Используйте его перед инициализацией. А также, самое вкусное, то, что вы можете скопировать это неопределённое значение, даже в скалярную переменную. Где это может пригодится — решать вам.
Интересно также то, что если перед проверкой вставить:
char a = t[0]; t[0] = a;
то переменная наконец-то станет true. А если написать
bool a = t[0]; t[0] = a;
то ничего не изменится.
Позднее я повторил опыт на Visual Studio 2013 с 5 пакетом обновления запущенная на Windows 7. Там отладчик говорит, что неинициализированная переменная равна true, но несмотря на это в блок true не заходит. Также она говорит, что ветка default не нужна, так как все возможные метки уже заданы. Но несмотря на это заходит в блок default.
В Linux данная особенность не проявляется.
- Ненормальное программирование
- C++
