奇怪的问题,但有人给我看了这个,我想知道你能不能用 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;
}
是的。对于整数类型,如果操作数为零则!返回,否则返回。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只是神秘的。)
最初,在 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