c-在java中等效的圆括号、逗号运算符和三元运算符组合



任何人都能解释以下语句的作用吗?事实上,我想翻译这里显示的java代码,所以它的真实代码

w = (m<3?y--,m+=13:m++,d+153*m/5+15*y+y/4+19*c+c/4+5);

我搜索了很多,但没能找到这个语句的作用。有人能解释一下并帮我把它转换成Java代码吗?在C语言的三元算子中,我从未见过一元算子的组合。对不起,如果是简单的问题,但我不理解。

这:

w = (m<3?y--,m+=13:m++,d+153*m/5+15*y+y/4+19*c+c/4+5);

结果与此相同:

if (m<3) {
y--;
m+=13;
} else {
m++;
}
w = (d + (153*m/5) +(15*y) + (y/4) + (19*c) + (c/4) + 5);

现在来解释一下。这里有一个三元运算符的例子。第二个子句是允许使用逗号运算符的表达式,而第三个子句是

条件表达式因此,带有隐式括号的表达式如下所示:

w = (((m<3)?(y--,m+=13):m++), (d + (153*m/5) +(15*y) + (y/4) + (19*c) + (c/4) + 5));

构成条件的部分是:

(m<3)?(y--,m+=13):m++

因为这是逗号运算符的左操作数,所以不使用表达式的结果,因此可以从较大的表达式中提取:

(m<3)?(y--,m+=13):m++
w = (d + (153*m/5) +(15*y) + (y/4) + (19*c) + (c/4) + 5);

并且该条件然后可以被进一步转换为如上所述的CCD_ 2块。

我会试试的。

m<3?

本质上是

if (m < 3)

如果它的计算结果为true,则y递减,13加在m上。如果它的计算结果为false,则m递增,然后我认为w被设置为"0"的任何结果;d+153m/5+15y+y/4+19*c+c/4+5〃;是.

您可以通过删除条件运算符和逗号运算符来消除混淆:

if(m<3)
{
y--;
m+=13;
}
else
{
m++;
}
w = d + 153*m/5 + 15*y + y/4 + 19*c + c/4 + 5; 

最新更新