【发布时间】:2011-03-20 03:28:10
【问题描述】:
我正在编写一个控制台应用程序,它会尝试通过反复试验“猜测”一个数字,它运行良好,但它让我想知道我心不在焉地写的某个部分,
代码是:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x,i,a,cc;
for(;;){
scanf("%d",&x);
a=50;
i=100/a;
for(cc=0;;cc++)
{
if(x<a)
{
printf("%d was too big\n",a);
a=a-((100/(i<<=1))?:1);
}
else if (x>a)
{
printf("%d was too small\n",a);
a=a+((100/(i<<=1))?:1);
}
else
{
printf("%d was the right number\n-----------------%d---------------------\n",a,cc);
break;
}
}
}
return 0;
}
更具体地说,让我感到困惑的部分是
a=a+((100/(i<<=1))?:1);
//Code, code
a=a-((100/(i<<=1))?:1);
我使用((100/(i<<=1))?:1) 来确保如果100/(i<<=1) 返回 0(或 false),则整个表达式的计算结果将是 1 ((100/(i<<=1))?:***1***),并且我将条件的一部分留给如果它为 true 则可以工作的部分为空 @ 987654327@,它似乎可以正常工作,但是将条件的那部分留空有什么风险吗?
【问题讨论】:
-
这种类型的条件称为三元运算。如果您重新标记或重新命名帖子以包含“三元”,您可能会得到更好的回应。
-
en.wikipedia.org/wiki/%3F:">This</a> 链接,C 变体部分
-
@Segphault:它被称为 the 条件运算符(在 C 中)。这是 a 三元运算符的一个示例,它是一个通用术语,表示具有三个操作数的任何运算符。
-
如果您有疑问,这导致了这个问题,毫无疑问,您应该明确指定真实案例。 TooBored....考虑不要编写愚蠢的控制台游戏,因为它是一个积极的无聊反馈器。
-
@JeremyP:是的,“三元运算符”是具有三个操作数的运算符的通用术语。但是“条件运算符”(
?:)恰好是 C(以及许多类似语言)中的 only 三元运算符,因此它通常被称为“the 三元运算符”。用法可能有点草率,但很常见。 (C 标准从不将?:称为“三元”运算符。事实上,它仅在讨论fma()函数的语义时才使用“三元运算符”一词,该函数计算(x × y) + z。)
标签: c ternary-operator conditional-operator ternary