001*_*001 15 c++ int negation logical-operators
奇怪的问题,但有人向我展示了这一点,我想知道你可以使用不!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;
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 25
是.对于整数类型,如果操作数为零则!返回true,false否则返回.
所以!b这只是意味着b == 0.
这是将值转换为a的特殊情况bool.该!b可被视为!((bool)b)这样的问题是什么的"truthness" b.在C++中,算术类型,指针类型和枚举可以转换为bool.当值为0或null时,结果为false,否则为true(C++§4.1.2).
当然自定义类甚至可以重载operator!或者operator< 类型可以转换为bool >以允许!b它们的类.例如,std::stream已经重载operator!并operator void*检查failbit,所以成语就像
while (std::cin >> x) { // <-- conversion to bool needed here
...
Run Code Online (Sandbox Code Playgroud)
可以使用.
(但你的代码!( a > b && b <= c) || a > c && !b很神秘.)
最初,在C(C++所基于的)中没有布尔类型.相反,值"true"被分配给任何非零值,值"false"被分配给任何计算为零的值.这种行为在C++中仍然存在.因此,对于a int x,表达式!x意味着" x不是真的",即" x非零",即如果x为零则为真.
| 归档时间: |
|
| 查看次数: |
32813 次 |
| 最近记录: |