2015-07-10 8 views

ответ

7

Так как std::ostream::operator<< форматы bool значений по умолчанию. Он выдает 1 для true и 0 для false. Если вы хотите, чтобы напечатать текст "true" или "false", вы можете использовать boolalpha Io манипулятором:

std::cout << std::boolalpha << c; 
0

В операторе сравнения C (==) всегда возвращается целочисленное значение. т. Е. Если условие правильное, оно возвращает 1, иначе оно возвращает 0; Следовательно ответ 1.

+1

Нет, в C++, операторы с булевым результатом возвращают правильный 'bool' типа. – chris

5

Это поведение по умолчанию stream, но вы можете запросить текстовое представление с использованием std::boolalpha следующим образом:

#include <iomanip> 

... 

cout << std::boolalpha << c << endl; 

См docs and examples here.

Причина, по умолчанию отображения 0 когда false и 1 когда true в значительной степени исторический - в течение самого длительного времени C не имеет специальный bool типа, и поэтому результаты логических операций сравнение, как были закодированы в целых числах.

1

Такое поведение зависит от флагов выходного потока. Функция std::ostream::operator<<(bool) вызывает ::std::ostream::num_put(), поведение которой зависит от флага boolalpha; если не задано, функция выполняет преобразование в целое число, во-первых, перед отображением значения.

Вы можете изменить поведение, как это:

int main() { 
    int a = 5, b=5; 
    bool c; 
    c = a == b; 
    std::cout << std::boolalpha << c << std::endl; 
    return 0; 
} 

Примечания решающего добавления << std::boolalpha выше. См. Также: boolalpha.

0

Несомненно, я с радостью объясню!

Во-первых, давайте посмотрим на код:

Ваш код

int main() 
{ 
    int a = 5, b=5; 
    bool c; 
    c = a == b; 
    cout << c << endl; 
    return 0; 
} 

Ваша первая линия гласит: int a = 5, b = 5; < - Это устанавливает переменную

Ваша вторая строка гласит: bool c; < - в основном устанавливает это на место для булевой переменной

Вашей третья строка гласит: bool = 5 == 5; которая в основном говоря, что с заполнитель теперь равен true

Тогда при печати с здесь: cout << c << endl; вы в основном говорите, напечатать целое значение логического заполнителя или печать с, которая равна к истине, которая равна 1. Имеет ли это смысл?

Напоминание: при программировании 0 = false и 1 = истина. Следовательно, бинарные значения 1 и 0 действительно означают true или false, AKA вкл. Или выкл.

0

Либо

#include <iomanip> 

std::cout << std::boolalpha << c << std::endl; 

или

std::cout << (c ? "true" : "false") << std::endl; 
Смежные вопросы