2016-03-04 4 views
-1

в заявлении, cout << (i>0), где i является положительным и больше 0, сколько ударов (? > 0) должны всегда (насколько я проверял) вывод 1?Как cout << (i > 0); делает его равным 1?

#include <iostream> 

using namespace std; 

int main() 
{ 
    int i = 2, j = 5; 
    double k = 5.0; 
    cout << (i%j > 0) << " " << (i/k >0) << " " << (100>0) << endl; 
    cout << (i%j) << " " << (i/k) << endl; 
    return 0; 
} 

Выход:

1 1 1 
2 0.4  
+0

1 = истинно, 0 = ложь, это результат сравнения. Я что-то упускаю? – agilob

+1

'i> 0' возвращает значение' bool'ean (true или false). Оператор '' '' '' '' '' '' интерпретирует это 'bool' как' int' (или некоторый другой интегральный тип) и печатает значение '0' для' false' и '1' для' true'. –

+0

Спасибо, я не думал, что это превратилось в bool – Petarian

ответ

-3

Просто установите boolalpha так: http://www.cplusplus.com/reference/ios/boolalpha/

+5

Пожалуйста, избегайте ссылок только на ответы. Если связь сломается, это будет бесполезно. Обязательно включите соответствующую информацию в ответ. – Spencer4134

0

(i>0) возвращает булево true/false, который затем автоматически тип-литая 1 или 0 по cout.

+0

'TRUE/FALSE' в шапках может привести к путанице между макросами' TRUE' и 'FALSE' по отношению к логическому ключевому слову/значениям' true' и 'value'. – kfsone

+0

@kfsone Спасибо, я сделал предложенное изменение. –

0

выражений, используемых вами в perentheses оцениваются в «истинный» или «ложь», поэтому, когда выражение вычисляется истинный выход 1, если ложно выход равен 0. Если вы хотите вас можно включить boolalpha, например:

cout << boolalpha << (i % j > 0) << (i/k > 0);// rest of code... 

выходной сигнал этого может быть:

true false