Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 1.00
alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
#1

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

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

Может кто-нибудь поможет на простейшем но понятном примере объяснить как работает тип bool. Знаю что это тип может быть ложный или истинный но что-то никак его работу не могу понять.... для чего он нужен...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2010, 02:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Тип bool, для чего нужен, как работает? (C++):

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

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

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

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

error C3168: bool: недопустимый базовый тип для перечисляемого типа - C++
В Visual C++ 2005 это не вызывает ошибки. А почему в Visual C++ 2010 ошибка? enum State:bool{ON=true, OFF=false}; // error C3168:...

не работает bool xor(bool a, bool b) - C++
Учусь по "Базовому курсу" Герберта Шилда #include <iostream> bool xor(bool a, bool d); int main() { bool p, q; cout...

31
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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)
1
KHAV
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
alfer
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
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
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
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
26.04.2010, 03:27 #6
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  [ТС] #7
Цитата Сообщение от M128K145 Посмотреть сообщение
alfer, у него нету значения по умолчанию. Любое значение отличное от 0 - true, равное 0 - false.
Просто при проверке сравнение с true можно опускать, так же как и сравнение с false, но тогда для false надо писать с отрицанием
А кажись понял, т.е. если ставим просто (flag) то это истина, если (!flag) то ложное. Ну т.е. как и везде отрицаем знаком !
0
M128K145
Эксперт С++
8297 / 3517 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
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
&& - логическое И
|| - логическое ИЛИ
!  - логическое НЕ
2
alfer
1 / 1 / 0
Регистрация: 21.04.2010
Сообщений: 38
26.04.2010, 03:39  [ТС] #9
M128K145, вот за последнее разъяснение огромное спасибо!
0
accept
4825 / 3246 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
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
Lobotomite
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 14
20.10.2017, 00:55 #11
я всё ровно не понял для чего он нужен, понятно принцип роботы но можно же просто if else использовать то есть

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

x, я и через int могу вызвать bool зачем то нужен?
0
TRam_
308 / 313 / 84
Регистрация: 14.05.2017
Сообщений: 1,132
20.10.2017, 01:46 #12
Цитата Сообщение от Lobotomite Посмотреть сообщение
я и через int могу вызвать
можешь вместо int для этого char использовать, для экономии оперативной памяти

Сделан в C++ просто для удобства, чтобы не приходилось думать, что в параметре хранится только да/нет, или же там 256 значений может быть. В Cи например такого типа данных среди стандартных нет (хотя с Си 99 его можно добавлять).
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
20.10.2017, 07:52 #13
Lobotomite, а в if требуется bool.
Ежели x какой-нибудь int, то x > 0 дает bool,
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
0
COKPOWEHEU
257 / 246 / 46
Регистрация: 09.09.2017
Сообщений: 1,124
20.10.2017, 09:25 #14
Цитата Сообщение от Croessmah Посмотреть сообщение
а при if(x) будет неяное преобразование x к bool.
Неожиданно, да?
if() это оператор а не функция, он принимает любые числовые значения и проверяет на 0 без неявных преобразований.
Цитата Сообщение от Lobotomite Посмотреть сообщение
я всё ровно не понял для чего он нужен,
Например для if(x == true), поскольку для других типов true это и 1, и 101, и любые другие ненулевые значения.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
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
20.10.2017, 09:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2017, 09:40
Привет! Вот еще темы с ответами:

Объяснить (с примерами) для чего нужен RTTI, как и когда его можно и нужно использовать - C++
доброго времени суток. вопрос такой как я понял RTTI это свойсвто языка С++ которое было добавлено позднее его релиза, что бы...

Почему тип "bool" работает в файле с расширением .cpp и не работает в файле с расширением .c? - C++
Объясните, пожалуйста, почему тип &quot;bool&quot; в одной и той же программе работает в файле с расширением .cpp и не работает в файле с...

Для чего необходимо распределять память при помощи new и как оно работает - C++
Сижу вот думаю над таким куском кода и не могу понять, как он работает. Допустим мы объявляем структуру: struct nameofctruct { ...

Тип BOOL - C++
Что API функции возвращают в качестве TRUE? 1? Или любой не 0?


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

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

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