Подтвердить что ты не робот

Не оператор в С++ для int?

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

#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;
}
4b9b3361

Ответ 1

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

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


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

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

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

.

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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