Переменная bool c#
Поясните пожалуйста как работает переменная bool в c#. Хочу понять так ли я понял) Спасибо.
Ну мне кажется что любая документация вполне раскрывает тип этой переменной =) Это переменная которая имеет одно из значений, true или false ( так же есть неявное значение Null ). Используется она с if, do, while и for. Так же передается в результате сравнения либо других операций.
В любом случае вам стоит уточнить ваш вопрос, что вам не понятно либо в чем есть сомнения.
![]()
bool переменная которая может принимать значения только true false.
bool? дополнительно Nullable
![]()
bool — логическая переменная
Используется в if, while, do while, for. Она может принимать значения true или false.
Т.е. health при старте 100, и функция if проверяет, равняется и/или меньше ли оно нуля. Но т.к. у нас health = 100, то функция false, что означает оно выполняться не будет
Есть несколько операторов сравнения: == (равно), != (не равно), >= (больше или равно), <=(меньше или равно).
Также можем проверить несколько значений:
Т.е. Если bool1 будет равен true ИЛИ bool2 == true, то выполняется команда
Типы данных в С — bool, boolean и enum: сравнение и их возможности
![]()
Молодые программист ы п ри изучении языка программирования С ч асто встречают такие термины , как «boolean», «bool», «enum», но не всегда понимают , что это и когда их использовать. Сегодня мы исправим ситуацию и поговорим об этих терминах.
«Boolean» и «bool» — это термины, обозначающее одно и то же. Они указывают на то, что тип данных принадлежит к логическому типу. «Bool» — это сокращение от «boolean». Используется непосредственно в коде, когда программисту нужно взаимодействовать с логическим типом данных. Термин «boolean» чаще используется в разговоре, когда нужно указать, что речь идет именно о логически х ( булевых) данных.
Термин «enum» относится к перечисляемым типам данных. В числе перечисляемых типов данных могут быть строки или числа. Это довольно специфический идентификатор.
Теперь давайте о становимся на каждом термине и типе данных немного по подробнее.
«Boolean», «bool» в С — что это такое?
-
«true», оно же «1» или «истина»;
-
«false», оно же «0» или «ложь».
Перечисляемый тип данных «enum»
-
«WinterMonth» — это идентификатор перечисления, имя идентификатора всегда начинается с большой буквы;
-
«DECEMBER, JANUARY, FEBRUARY» — это перечислители, они всегда пишутся заглавными буквами ; перечислители не могут повторяться в разных перечислениях одного кода;
-
в конце перечисления всегда стоит точка с запятой;
-
каждому перечислителю в автоматическом режиме присваивается целочисленный идентификато р ( значение), начиная с «0», то есть: «DECEMBER» — «0», «JANUARY» — «1», FEBRUARY — «2»;
-
если нужно, тогда можно каждому перечислителю задать собственный идентификатор, например , это будет выглядеть так: «enum WinterMonth
;».
Заключение
Теперь вы познакомились с такими терминами, как «boolean», «bool» и «enum», и знаете , что это такое и к какому типу данных относится. Часто эти два типа данных конкурируют между собой, потому что предлагают п рограммист у осуществить программный выбор между значениями. Проблема в том, что «boolean» позволяет выбирать только между «true» и «false» , а это два взаимоисключающих состояния. Поэтому , если вы уверены, что у объекта может быть только 2 состояния, тогда этот тип значений актуально использовать. Например, как в нашем примере со сливой — она либо фрукт, либо нет.
Однако бывают такие случаи, когда состояния у объекта меняются или расширяются. В таких случаях рекомендуют использовать конструкцию «enum», потому что с «boolean» можно попасть в трудную ситуаци ю . В следующих статьях мы обязательно разберем такую ситуацию.
Мы будем очень благодарны
если под понравившемся материалом Вы нажмёте одну из кнопок социальных сетей и поделитесь с друзьями.
тип bool в C
Не могу понять, что происходит с типом bool. пустая прога:
при компиляции gcc выдает:
test.c: in function ‘main’: test.c:3: ‘bool’ undeclared (first use in this function) test.c:3: (Each undeclared identifier is reported only once test.c:3: for each function it appears in.) test.c:3: parse error before ‘bval’
Что, нет такого типа ‘bool’.
Re: тип bool в C
Прикинь, и в самом деле нет.
Re: тип bool в C
Типа bool в С действительно нет. Точнее, в версиях стандарта до C99 его действительно нет. В С99 он есть, но называется _Bool. Кроме того, определен заголовочный файл <stdbool.h> в котором определен `bool’ как синоним для _Bool. Сделано это было, чтобы не нарушать совместимость с существующим кодом. GCC поддерживает С99 в этом отношении. Однако особого смысла в использовании _Bool/bool я не вижу, т.к. в плане проверки типов это обычный целочисленный тип (совместимый по присваиванию с int и так далее). Единственная особенность — явное приведение к _Bool дает всегда либо 0 либо 1 (это, однако, не означает, что переменная типа _Bool будет занимать в памяти один бит) — точно такой же эффект может быть достигнут при помощи `!!’

Re: тип bool в C
А не проще писать так?
#define TRUE 1
#define FALSE 0
Ну и для полной радости
typedef unsigned short bool;
Re: Re: тип bool в C
short занимает 2 байта, может быть вместо него использовать char?
Re: тип bool в C
Компилятор при сравнениях и прочих операциях будет приводить char к int, так что ты выиграешь (может быть) в памяти, но проиграешь (какие-то копейки) в скорости.
Конструкция
typedef enum
будет лучше (IMHO), чем #define.
Re: Re: тип bool в C
я понял, спасибо за ответы

Re: тип bool в C
Re: тип bool в C
Ну здрасьте, всегда в условиях проверяли числа и указатели на 0 просто if(!number) а тут оказывается false!=0. приехали.
Re: тип bool в C
> enum не обязан начинаться с 0
Согласно стандарту языка Си, первый элемент перечисления по умолчанию равен 0.
> я не уверен что 0 это на самом деле false
Если использовать конструкцию
enum
то слово false будет синонимом числа 0.
Во всяком случае, компилятор, встретив false, будет заменять его на 0 (а true — на 1).
Тип у обоих будет int.
Вот пример:
Функция, написанная программером:
bool fn(bool arg)
<
if (arg) do_something();
else do_nothing();
return true;
>
Та же функция, но с точки зрения компилятора:
int fn(int arg)
<
if (arg != 0) do_something();
else do_nothing();
return 1;
>
Вобщем, разница между использованием int в диапазоне от 0 до 1 и использованием bool от false до true заключается только в читабельности программы. Если в программе есть немалое количество функций, возвращающих только успешность выполнения (да/нет), то есть смысл (IMHO) использовать для этих целей bool — для лучшей читаемости. То же самое справедливо и для аргументов функций.
Re: тип bool в C
Плохо не то что false == 0, а то что true == 1; Значит проверки на x == true будут проваливаться для большинства случаев.
В C нет булевского типа — лучше с этим смириться и вести себя соответсвенно, а не смущать народ.
Re: тип bool в C
> Значит проверки на x == true будут проваливаться
> для большинства случаев
int main()
<
if (fn() != true) puts("anonymous прав");
return 0;
>
Если функция возвращает либо false, либо true, все будет работать.
Если функция возвращает char *, то fn() == true работать не будет.
Но то же самое верно и для Си++.
При чем здесь "В C нет булевского типа — лучше с этим смириться и вести себя соответсвенно, а не смущать народ"?
Re: тип bool в C
> Если функция возвращает char *, то fn() == true работать не будет.
Именно. Догадайтесь почему. (Правильный ответ — нет встроенного преобразования char* -> bool, т.к."В C нет булевского типа" )
> Но то же самое верно и для Си++.
При чем здесь это? Кстати и в С++ bool не слишком нужен. (Я не имею в виду vector<bool>).
> При чем здесь "В C нет булевского типа — лучше с этим смириться и вести себя соответсвенно, а не смущать народ"?
Проверки типа ‘!= NULL’, ‘== FALSE’, ‘== TRUE’ в С не только бесполезны, но и вредны. Тот кто их применяет — напрашивается на неприятности сам и делает код менее читаемым для окружающих.
Re: тип bool в C
Re: тип bool в C
false == 0
frue == не 0 (любое число != 0)
Re: тип bool в C
Предпоследнему anonymous.
Похоже, имеет место непонимание друг друга.
Пример.
/* При успешном выполнении функция возвращает 1. */
/* При ошибке — 0. */
int fn(const char *filename)
<
if (some_condition) return 0;
/*. */
if (another_condition) return 0;
/*. */
return 1;
>
int main(int argc, char *argv[])
<
if (!fn(argv[1])) return 1;
/*. */
return 0;
>
Так вот, функция fn может в данном случае выглядеть так:
bool fn(const char *filename)
<
if (some_condition) return false;
/*. */
if (another_condition) return false;
/*. */
return true;
>
При этом отпадает необходимость такого комментария:
/* При успешном выполнении функция возвращает 1. */
/* При ошибке — 0. */
для каждой подобной функции.
Если такая функция одна, то не стоит и огород городить.
А если их два десятка, то программа (IMHO) будет читаться легче — потому что достаточно взглянуть на объявление функции в файле .h, чтобы понять, что она возвращает. Если же функция объявлена как возвращающая int, то придется лезть в файл .c, чтобы почитать комментарий — ведь функция, возвращающая int, может вернуть не только признак успешного/ошибочного выполнения, но и вообще все, что угодно — например, дескриптор открытого файла. Функция же, возвращающая bool, может вернуть только признак успешности своего выполнения — во всяком случае, так подразумевается читающим программу.
А ты в своем примере (с fn() == 45) нарушаешь общепринятые правила: объявляешь функцию так, будто она возвращает значение перечислимого типа, а на самом деле она возвращает другое.
Вот поясняющий пример:
int main()
<
static const char c[] = "123";
putchar(c[fn()]);
puts("segfault почему-то не случился");
return 0;
>