如果C ++中有这样的代码。
j = 5;
k[i] = j * ((k[i] > 0));
然后,如果k [i]
是1
,则(k [i]> 0)
变成1
。
所以最后一个k [i]
是5
。
如果k [i]
是-1
,则(k [i]> 0)
变成0
。
所以最后一个k [i]
为零。
那我想知道
j = 5;
k[i] = j * ((10 > k[i] > 0));
这里
如果k[i] = 5
,则k[i]
大于0
但小于10
。
还有(10> k [i]> 0) = 1
和j * 1 = 5
吗?
我可以同时使用三个比较运算符吗?
谢谢。
答案 0 :(得分:1)
它将编译,但是将不起作用。您需要写(10 > k[i] && k[i] > 0)
答案 1 :(得分:1)
没有c ++不支持同时将变量与多个值进行比较。 令人困惑的是,您的比较甚至可能会编译,但不会像您认为的那样进行。例如:
#include <iostream>
#include <string>
int main()
{
int b = 21;
if ( 5 < b < 20 )
{
std::cout << "OK";
}
else
{
std::cout << "Fail";
}
}
将编译(带有警告),但将打印OK
而不是Fail
。发生的事情是您实际上已经拥有:
if ( (5 < b) < 20 )
评估为:
if ( true < 20 )
true
小于20,因此比较返回true。您需要完整说明要执行的比较:
#include <iostream>
#include <string>
int main()
{
int b = 21;
if ( (5 < b) && (b < 20) )
{
std::cout << "OK";
}
else
{
std::cout << "Fail";
}
}