Bool c что это
Перейти к содержимому

Bool c что это

Переменная bool c#

Поясните пожалуйста как работает переменная bool в c#. Хочу понять так ли я понял) Спасибо.

Ну мне кажется что любая документация вполне раскрывает тип этой переменной =) Это переменная которая имеет одно из значений, true или false ( так же есть неявное значение Null ). Используется она с if, do, while и for. Так же передается в результате сравнения либо других операций.

В любом случае вам стоит уточнить ваш вопрос, что вам не понятно либо в чем есть сомнения.

user avatar

bool переменная которая может принимать значения только true false.

bool? дополнительно Nullable

user avatar

bool — логическая переменная

Используется в if, while, do while, for. Она может принимать значения true или false.

Т.е. health при старте 100, и функция if проверяет, равняется и/или меньше ли оно нуля. Но т.к. у нас health = 100, то функция false, что означает оно выполняться не будет

Есть несколько операторов сравнения: == (равно), != (не равно), >= (больше или равно), <=(меньше или равно).

Также можем проверить несколько значений:

Т.е. Если bool1 будет равен true ИЛИ bool2 == true, то выполняется команда

Типы данных в С — bool, boolean и enum: сравнение и их возможности

Lorem ipsum dolor

Молодые программист ы п ри изучении языка программирования С ч асто встречают такие термины , как «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 bool;

будет лучше (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;
>

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *