Могу ли я использовать оператор NOT в C ++ на значениях int?
-
29-09-2019 - |
Вопрос
Странный вопрос, но кто -то показал мне это, мне было интересно, не могли бы вы использовать нет! Оператор для 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