Могу ли я использовать оператор NOT в C ++ на значениях int?

StackOverflow https://stackoverflow.com/questions/4123550

Вопрос

Странный вопрос, но кто -то показал мне это, мне было интересно, не могли бы вы использовать нет! Оператор для 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;
}
Это было полезно?

Решение

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

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


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

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top