Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/762: Рейтинг темы: голосов - 762, средняя оценка - 4.63
 Аватар для alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38

Тип bool, для чего нужен, как работает?

26.04.2010, 02:58. Показов 145436. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Может кто-нибудь поможет на простейшем но понятном примере объяснить как работает тип bool. Знаю что это тип может быть ложный или истинный но что-то никак его работу не могу понять.... для чего он нужен...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2010, 02:58
Ответы с готовыми решениями:

Как работает и для чего нужен maven offline mode?
Отсюда: Вопрос mvn clean install по умолчанию разве проверяет обновления плагинов и зависимостей(без наличия Versions maven...

Для чего нужен тип void?
для чего нужна функция void

Что обозначает тип интерфейса и для чего он нужен?
До меня всё никак докатить не может, что вообще обозначает переменная с типом интерфейс(например, ICar<V8Engine>, это же тип, я...

30
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.04.2010, 03:03
C++
1
2
3
4
5
6
7
8
9
10
11
bool flag;
int n;
std::cin>>n;
if(n > 0)
    flag = true;
else
    flag = false;
if(flag) //flag == true
    std::cout<<"n > 0";
else
    std::cout<<"n <= 0";
Он используется для проверки логических условий или как флаг состояний, как выключатель - ВКЛ и ВЫКЛ (true и false)
4
5 / 5 / 1
Регистрация: 19.04.2010
Сообщений: 18
26.04.2010, 03:05
Пусть my_variable имеет тип bool
C
1
2
3
4
5
if (my_variable) {
  printf("True!\n");
} else {
  printf("False!\n");
}
равнозначен коду
C
1
2
3
4
5
if (my_variable != 0) {
  printf("True!\n");
} else {
  printf("False!\n");
}
2
 Аватар для alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:22  [ТС]
Т.е. по умолчанию он получается является как true?

C++
1
2
3
4
5
6
7
8
if(n > 0)
    flag = true;
else
    flag = false;
if(flag) //flag == true - вот здесь
    std::cout<<"n > 0";
else
    std::cout<<"n <= 0";
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
26.04.2010, 03:22
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    bool a = 1 < 2;
    bool b = 1 > 2;
 
    std::cout << std::boolalpha << a << std::endl;
    std::cout << std::boolalpha << b << std::endl;
    return 0;
}
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.04.2010, 03:27
alfer, у него нету значения по умолчанию. Любое значение отличное от 0 - true, равное 0 - false.
Просто при проверке сравнение с true можно опускать, так же как и сравнение с false, но тогда для false надо писать с отрицанием
C++
1
if(!flag)
rangerx, ну зачем же так...
1
 Аватар для alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:32  [ТС]
Цитата Сообщение от M128K145 Посмотреть сообщение
alfer, у него нету значения по умолчанию. Любое значение отличное от 0 - true, равное 0 - false.
Просто при проверке сравнение с true можно опускать, так же как и сравнение с false, но тогда для false надо писать с отрицанием
А кажись понял, т.е. если ставим просто (flag) то это истина, если (!flag) то ложное. Ну т.е. как и везде отрицаем знаком !
0
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
26.04.2010, 03:37
Запись
C++
1
2
3
4
5
if (flag == true) 
// эквивалентна записям 
// if (flag)
// if (flag != 0)
// if (flag != false)
Запись
C++
1
2
3
4
5
if (flag == false)
// эквивалентна записям 
// if (!flag) 
// if (flag == 0)
// if (flag != true)
Цитата Сообщение от alfer Посмотреть сообщение
если ставим просто (flag) то это истина, если (!flag) то ложное
не "то это истина", а "проверка на истинность условия"

Цитата Сообщение от alfer Посмотреть сообщение
отрицаем знаком !
Да, это логическое отрицание
C++
1
2
3
&& - логическое И
|| - логическое ИЛИ
!  - логическое НЕ
4
 Аватар для alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:39  [ТС]
M128K145, вот за последнее разъяснение огромное спасибо!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
26.04.2010, 05:37
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdbool.h> /* это для C99 */
 
bool func(int a, int b)
{
    return a > b ? true : false;
}
 
...
 
if (func(1, 2) == false) {
    printf("error\n");
    exit(EXIT_FAILURE); /* можно return EXIT_FAILURE */
}
 
printf("right!\n");
то есть это не только для флажков
0
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 27
20.10.2017, 00:55
я всё ровно не понял для чего он нужен, понятно принцип роботы но можно же просто if else использовать то есть

if(x>0) //то пускай будет истинна
esle if(x<0) //пускай будет не истина

x, я и через int могу вызвать bool зачем то нужен?
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
20.10.2017, 01:46
Цитата Сообщение от Lobotomite Посмотреть сообщение
я и через int могу вызвать
можешь вместо int для этого char использовать, для экономии оперативной памяти

Сделан в C++ просто для удобства, чтобы не приходилось думать, что в параметре хранится только да/нет, или же там 256 значений может быть. В Cи например такого типа данных среди стандартных нет (хотя с Си 99 его можно добавлять).
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.10.2017, 07:52
Lobotomite, а в if требуется bool.
Ежели x какой-нибудь int, то x > 0 дает bool,
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
20.10.2017, 09:25
Цитата Сообщение от Croessmah Посмотреть сообщение
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
if() это оператор а не функция, он принимает любые числовые значения и проверяет на 0 без неявных преобразований.
Цитата Сообщение от Lobotomite Посмотреть сообщение
я всё ровно не понял для чего он нужен,
Например для if(x == true), поскольку для других типов true это и 1, и 101, и любые другие ненулевые значения.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.10.2017, 09:40
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
if() это оператор а не функция
Это statement.
Из стандарта:
The value of a condition that is an initialized declaration in a statement other than a switch statement is the value of the declared variable contextually converted to bool (Clause 4).
...
The value of a condition that is an expression is the value of the expression, contextually converted to bool for statements other than switch
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
20.10.2017, 10:46
вроде тут написано "значение воспринимается в контексте логических", то есть поведение будет аналогичным булевским. Самого преобразования (как, например, в double+int ) может не быть.
0
20.10.2017, 16:30

Не по теме:

Atakai, чтобы тонна кода не поломалась?

0
20.10.2017, 17:11

Не по теме:

Можно было бы это делать в новом коде... если бы там было неявное преобразование. Как в Си рекомендуют писать int main() вместо main().

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
20.10.2017, 21:57
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Самого преобразования (как, например, в double+int ) может не быть.
нет. не может.

если выражение не приводимо к булю - будет ошибка компиляции.

C++
1
if(expression)
является эквивалетным:

C++
1
if( bool(expression) )
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,921
21.10.2017, 00:04
где оно в ассемблерном коде? Неявные преобразования там вполне видны.
операторы if, while и прочие просто принимают любой численный тип (включая, например, char и void*).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.10.2017, 00:04
Помогаю со студенческими работами здесь

Что за тип файла xlm - и для чего он нужен
У меня есть такой вопрос - теоретического свойства. Зачем нужно сохранять xls в xlm? Такой формат файла можно выбрать при...

как правильно понять тип bool ? bool true(const string &str) и что дает это значение ?
задам может глупый вопрос, но прошу ответить. как правильно понять тип bool ? bool true(const string &amp;str) и что дает это...

Для чего нужен возвращаемый тип в перегрузке ввода >> и почему без него него выдаётся ошибка?
Для чего нужен возвращаемый тип в перегрузке ввода &gt;&gt;, какую роль он выполняет что без него него выдаётся ошибка. cin объект istream...

Для чего нужен Seed() и для чего его override?
Привет, ребята. Прочитал много разных статей про Seed(). И так и не могу понять зачем он нужен на практике. Вот выдержка одной из...

Для чего нужен С/С++ и как ним пользоваться?
Для чего С/С++ и как ним пользоваться? Просветите меня пожалуйста, я в компах не плохо разбираюсь, но в программировании я ничего не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru