繁体   English   中英

我需要知道这句话在c++中的解释“ b = (c > 5) ? a/c/2 : 0; ”

[英]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 取决于ac是否为整数类型,连续的除法运算可能会丢弃非整数部分。

我会提到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM