16

奇怪的问题,但有人给我看了这个,我想知道你能不能用 not !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;
}
4

5 回答 5

26

是的。对于整数类型,如果操作数为零则!返回,否则返回。truefalse

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


这是将值转换为 a 的特殊情况bool!b可以这么看,!((bool)b)问题是什么是“真实性” b。在 C++ 中,算术类型、指针类型和枚举可以转换为bool. 当值为 0 或 null 时,结果为false,否则为true(C++ §4.1.2)。

当然自定义类甚至可以重载operator!or operator< types can be convert to bool > 以允许!b他们的类。例如,std::stream重载了operator!andoperator void*来检查故障位,所以像这样的习语

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

可以使用。

(但你的代码!( a > b && b <= c) || a > c && !b只是神秘的。)

于 2010-11-08T11:56:14.050 回答
7

最初,在 C(C++ 所基于的)中没有布尔类型。相反,值“true”被分配给任何非零值,而值“false”被分配给任何评估为零的值。这种行为在 C++ 中仍然存在。所以对于 an int x,表达式的!x意思是“x不为真”,即“x非非零”,即如果x为零,则为真。

于 2010-11-08T11:59:51.133 回答
5

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

于 2010-11-08T11:56:48.187 回答
3

对 int 的测试对于非零值是 true,对于零值是 false,所以 not 只是对于零值是 true,对于非零值是 false。

于 2010-11-08T11:56:36.037 回答
3

内置!运算符将其参数转换为bool. 该标准规定存在从任何算术类型( int, char,.... float, double...) 到 bool的转换。如果源值为 0,则结​​果为true,否则为false

于 2010-11-08T11:58:04.777 回答