我可以在int值上使用C++中的not运算符吗?

001*_*001 15 c++ int negation logical-operators

奇怪的问题,但有人向我展示了这一点,我想知道你可以使用不!C++中的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;
}
Run Code Online (Sandbox Code Playgroud)

ken*_*ytm 25

是.对于整数类型,如果操作数为零则!返回true,false否则返回.

所以!b这只是意味着b == 0.


这是将值转换为a的特殊情况bool.该!b可被视为!((bool)b)这样的问题是什么的"truthness" b.在C++中,算术类型,指针类型和枚举可以转换为bool.当值为0或null时,结果为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
  ...
Run Code Online (Sandbox Code Playgroud)

可以使用.

(但你的代码!( a > b && b <= c) || a > c && !b很神秘.)


Amn*_*non 7

最初,在C(C++所基于的)中没有布尔类型.相反,值"true"被分配给任何非零值,值"false"被分配给任何计算为零的值.这种行为在C++中仍然存在.因此,对于a int x,表达式!x意味着" x不是真的",即" x非零",即如果x为零则为真.


vit*_*aut 5

可以,!b相当于(b == 0)