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

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

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

Может кто-нибудь поможет на простейшем но понятном примере объяснить как работает тип bool. Знаю что это тип может быть ложный или истинный но что-то никак его работу не могу понять.... для чего он нужен...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2010, 02:58
Ответы с готовыми решениями:

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

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

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

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

30
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
26.04.2010, 03:03 2
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 3
Пусть 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
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:22  [ТС] 4
Т.е. по умолчанию он получается является как 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
1998 / 1598 / 488
Регистрация: 31.05.2009
Сообщений: 2,990
26.04.2010, 03:22 5
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Эксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
26.04.2010, 03:27 6
alfer, у него нету значения по умолчанию. Любое значение отличное от 0 - true, равное 0 - false.
Просто при проверке сравнение с true можно опускать, так же как и сравнение с false, но тогда для false надо писать с отрицанием
C++
1
if(!flag)
rangerx, ну зачем же так...
1
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:32  [ТС] 7
Цитата Сообщение от M128K145 Посмотреть сообщение
alfer, у него нету значения по умолчанию. Любое значение отличное от 0 - true, равное 0 - false.
Просто при проверке сравнение с true можно опускать, так же как и сравнение с false, но тогда для false надо писать с отрицанием
А кажись понял, т.е. если ставим просто (flag) то это истина, если (!flag) то ложное. Ну т.е. как и везде отрицаем знаком !
0
Эксперт JavaЭксперт С++
8362 / 3583 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
26.04.2010, 03:37 8
Запись
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
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:39  [ТС] 9
M128K145, вот за последнее разъяснение огромное спасибо!
0
4849 / 3270 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
26.04.2010, 05:37 10
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 11
я всё ровно не понял для чего он нужен, понятно принцип роботы но можно же просто if else использовать то есть

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

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

Сделан в C++ просто для удобства, чтобы не приходилось думать, что в параметре хранится только да/нет, или же там 256 значений может быть. В Cи например такого типа данных среди стандартных нет (хотя с Си 99 его можно добавлять).
0
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,294
Записей в блоге: 2
20.10.2017, 07:52 13
Lobotomite, а в if требуется bool.
Ежели x какой-нибудь int, то x > 0 дает bool,
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
0
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,930
20.10.2017, 09:25 14
Цитата Сообщение от Croessmah Посмотреть сообщение
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
if() это оператор а не функция, он принимает любые числовые значения и проверяет на 0 без неявных преобразований.
Цитата Сообщение от Lobotomite Посмотреть сообщение
я всё ровно не понял для чего он нужен,
Например для if(x == true), поскольку для других типов true это и 1, и 101, и любые другие ненулевые значения.
0
Don't worry, be happy
16921 / 9797 / 1887
Регистрация: 27.09.2012
Сообщений: 24,294
Записей в блоге: 2
20.10.2017, 09:40 15
Цитата Сообщение от 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
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,930
20.10.2017, 10:46 16
вроде тут написано "значение воспринимается в контексте логических", то есть поведение будет аналогичным булевским. Самого преобразования (как, например, в double+int ) может не быть.
0
Croessmah
20.10.2017, 16:30
  #17

Не по теме:

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

0
COKPOWEHEU
20.10.2017, 17:11
  #18

Не по теме:

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

0
Эксперт С++
8274 / 3850 / 837
Регистрация: 15.11.2014
Сообщений: 8,726
20.10.2017, 21:57 19
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Самого преобразования (как, например, в double+int ) может не быть.
нет. не может.

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

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

C++
1
if( bool(expression) )
0
2719 / 1669 / 347
Регистрация: 09.09.2017
Сообщений: 6,930
21.10.2017, 00:04 20
где оно в ассемблерном коде? Неявные преобразования там вполне видны.
операторы if, while и прочие просто принимают любой численный тип (включая, например, char и void*).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.10.2017, 00:04

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.