манипулирование логическим типом - PullRequest
4 голосов
/ 19 сентября 2011

этот код

#include <iostream>

using namespace std;
int main(){
  bool t=false;
  cout<<t &&(!t)<<endl;

  return 0;
}

показывает мне ошибку, как это

недопустимые операнды типов 'bool' и '' для двоичного 'Оператор <<' </p>

Что не так? Я не могу этого понять, пожалуйста, объясни мне это. Я думаю, что && и ! определены в c ++.

Так что не так?

Ответы [ 5 ]

16 голосов
/ 19 сентября 2011

"недопустимые операнды типов 'bool' и '' to bin ', оператор <<'" </p>

Это означает, что второй оператор << пытается выполнить операторы (! T) и 'endl'.

<< имеет более высокий приоритет, чем &&, поэтому ваш оператор cout выполняется так:

(cout << t ) && ( (!t) << endl );

Добавьте скобки, чтобы исправить это:

cout << (t && (!t) ) << endl ;

Смотрите здесь для порядка операций, когда операторы не оцениваются должным образом.

6 голосов
/ 19 сентября 2011

Добавьте скобки, чтобы получить правильный приоритет операторов:

cout << (t && !t) << endl;

Эквивалентно:

cout << false << endl;
3 голосов
/ 19 сентября 2011

&& имеет более низкий приоритет, чем <<, поэтому оператор оценивается как (cout << t) && (!t << endl);

Приоритет оператора C ++

2 голосов
/ 19 сентября 2011

Проблема связана с приоритетом оператора, поскольку && имеет более низкий приоритет, чем <<.

cout<<(t && (!t))<<endl;  // ok!

Также для любой bool переменной t выражения t && (!t) всегда приводит к false, а t || (!t) всегда приводит к true.:)

2 голосов
/ 19 сентября 2011

Вам нужно еще несколько скобок:

cout << (t && !t) << endl;
...