Могу ли я использовать оператор not в C ++ для значений int? - PullRequest
13 голосов
/ 08 ноября 2010

Странный вопрос, но кто-то показал мне это, Мне было интересно, вы можете использовать нет! оператор для int в C ++? (это странно для меня).

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}

Ответы [ 5 ]

23 голосов
/ 08 ноября 2010

Да. Для целочисленных типов ! возвращает true, если операнд равен нулю, и false в противном случае.

Так что !b здесь означает просто b == 0.


Это частный случай, когда значение преобразуется в bool. !b можно рассматривать как !((bool)b), поэтому вопрос в том, что такое «истинность» b. В C ++ арифметические типы, типы указателей и enum могут быть преобразованы в bool. Когда значение равно 0 или равно нулю, результат равен false, в противном случае он равен true (C ++ §4.1.2).

Конечно, пользовательские классы могут даже перегружать типы operator! или operator <<em>, их можно преобразовать в bool >, чтобы разрешить !b для своих классов. Например, std::stream перегружает operator! и operator void* для проверки битов сбоя, так что такие идиомы, как

while (std::cin >> x) {   // <-- conversion to bool needed here
  ...

можно использовать.

(Но ваш код !( a > b && b <= c) || a > c && !b просто загадочный.)

7 голосов
/ 08 ноября 2010

Первоначально в C (на котором основан C ++) не было логического типа.Вместо этого значение «true» было присвоено любому ненулевому значению, а значение «false» было присвоено чему-либо, что оценивается как ноль.Такое поведение все еще существует в C ++.Таким образом, для int x выражения !x означают «x not true», что означает «x not non-zero», т.е. это правда, если x равен нулю.

4 голосов
/ 08 ноября 2010

Можно, !b эквивалентно (b == 0).

3 голосов
/ 08 ноября 2010

Встроенный оператор ! преобразует свой аргумент в bool.Стандарт определяет, что существует преобразование из любого арифметического типа (int, char, .... float, double ...) в bool ,Если исходное значение равно 0, результат равен true, в противном случае это false

3 голосов
/ 08 ноября 2010

Тест для int имеет значение true для ненулевых значений и false для нулевых значений, поэтому не является истинным для нулевых значений и false для ненулевых значений.

...