奇怪的问题,但有人告诉我这个, 我想知道你能不能使用! 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;
}
答案 0 :(得分:23)
是。对于整数类型,!
如果操作数为零则返回true
,否则返回false
。
所以!b
这意味着b == 0
。
这是将值转换为bool
的特殊情况。 !b
可以被视为!((bool)b)
,因此问题是b
的“真实性”是什么。在C ++中,算术类型,指针类型和枚举可以转换为bool
。当值为0或null时,结果为false
,否则为true
(C ++§4.1.2)。
当然,自定义类甚至可以超载operator!
或operator
&lt; 类型可以转换为bool &gt;允许!b
为他们的课程。例如,std::stream
已经超载了operator!
和operator void*
以检查故障位,因此像
while (std::cin >> x) { // <-- conversion to bool needed here
...
可以使用。
(但您的代码!( a > b && b <= c) || a > c && !b
只是神秘莫测。)
答案 1 :(得分:7)
最初,在C(C ++所基于的)中没有布尔类型。而是将值“true”分配给任何非零值,将值“false”分配给任何计算为零的值。这种行为在C ++中仍然存在。因此对于int x
,表达式!x
表示“x
不为真”,即“x
不为非零”,即如果x
则为真是零。
答案 2 :(得分:4)
您可以!b
相当于(b == 0)
。
答案 3 :(得分:3)
int的测试对于非零值为true,对于零值为false,因此对于零值不是正确,对于非零值则不是false。
答案 4 :(得分:3)
内置!
运算符将其参数转换为bool
。该标准指定 存在来自任何算术类型的转换(int
,char
,.... float
,double
...) bool 。如果源值为0,则结果为true
,否则为false