我可以在int值中使用C ++中的非操作员吗?
-
29-09-2019 - |
题
奇怪的问题,但是有人向我展示了这一点,我想知道你能否不使用! 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
.
这是一个特殊情况,值转换为 bool
. 。这 !b
可以看作 !((bool)b)
所以问题是什么是什么 b
. 。在C ++中,算术类型,指针类型和枚举可以转换为 bool
. 。当值为0或null时,结果为 false
, ,否则是 true
(C ++§4.1.2)。
当然,自定义课程甚至可以超载 operator!
或者 operator
<类型可以转换为布尔>允许 !b
为他们的课。例如, std::stream
已经超载了 operator!
和 operator void*
用于检查失败的问题,以便成语
while (std::cin >> x) { // <-- conversion to bool needed here
...
可以使用。
(但是您的代码 !( a > b && b <= c) || a > c && !b
只是神秘的。)
其他提示
最初,在C中(C ++基于)没有布尔类型。取而代之的是,将值“ true”分配给任何非零值,并且将值“ false”分配给了评估为零的任何内容。这种行为仍然存在于C ++中。所以 int x
, ,表达式 !x
方法 ”x
不正确”,那是”x
不是非零”,即是真的 x
为零。
你可以, !b
等同于 (b == 0)
.
对于非零值,INT的测试是正确的,对于零值是false的,因此对于零值,对于非零值而言不仅为false。
建筑 !
操作员将其论点转换为 bool
. 。标准指定 存在任何算术类型的转换(int
, char
,.... float
, double
...)布尔. 。如果源值为0,则结果是 true
, ,否则是 false