奇怪的问题,但有人给我看了这个,我想知道你能不能用 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;
}
奇怪的问题,但有人给我看了这个,我想知道你能不能用 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;
}
是的。对于整数类型,如果操作数为零则!
返回,否则返回。true
false
所以!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
只是神秘的。)
最初,在 C(C++ 所基于的)中没有布尔类型。相反,值“true”被分配给任何非零值,而值“false”被分配给任何评估为零的值。这种行为在 C++ 中仍然存在。所以对于 an int x
,表达式的!x
意思是“x
不为真”,即“x
非非零”,即如果x
为零,则为真。
可以,!b
相当于(b == 0)
。
对 int 的测试对于非零值是 true,对于零值是 false,所以 not 只是对于零值是 true,对于非零值是 false。
内置!
运算符将其参数转换为bool
. 该标准规定存在从任何算术类型( int
, char
,.... float
, double
...) 到 bool的转换。如果源值为 0,则结果为true
,否则为false