[英]I need to know the explanation of this sentence in c++ " b = (c > 5) ? a/c/2 : 0; "
我需要知道这句话在C++中的解释
我正在为 BL0937 编辑一个库,它使用能源监控参数,为了简单起见,我刚刚使用了 abc
b = (c > 5) ? a/c/2 : 0;
那可以改写成
if(c>5)
{
b = (a/c)/2;
}
else
{
b = 0;
}
x ? y : z
x ? y : z
是三元运算符,表示“如果x,则y,否则z”。
a/c/2
只是一条简单的划分链。 当除法运算符( /
)从左到右求值时,它等于(a/c)/2
。
因此,您的表达式首先求值c>5
,如果为true,它将求值为a/c/2
,否则为0。求值( a/c/2
或0)将分配给变量b
。
如果c > 5
,则将b
分配为(a/c)/2
,否则它将获得0
。 取决于a
和c
是否为整数类型,连续的除法运算可能会丢弃非整数部分。
我会提到c ++的更多运算符优先级规则,以防您可能混淆/
和x ? y : z
的优先级x ? y : z
x ? y : z
。
这是运营商优先级的官方页面: https : //en.cppreference.com/w/cpp/language/operator_precedence
由此可知,运算符/
优先于x ? y : z
x ? y : z
和=
,因此首先从左到右进行计算,即a/c/2
等于(a/c)/2
。 然后x ? y : z
x ? y : z
的优先级与=
相同, 从右到左计算。 现在意味着:
b = ( (c>5) ? ((a/c)/2) : 0 );
希望能帮助到你。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.