2012-05-14 160 views
3

可能重复:
The ternary (conditional) operator in C这是做什么用的?

这是我的老师帮助的代码示例。我不知道total = total*2+ (n=='1'? 1:0);做什么。我认为它将总数乘以2,但问号和1:0比率是多少?

int bcvt(FILE *infile){ 
    char n; 
    int i, total=0; 
    for(i=0; i<32; i++){  
    fscanf(infile, "%c", &n); 
    total = total*2+ (n=='1'? 1:0); 
    } 
    char dummy; 
    fscanf(infile, "%c", &dummy); 
    return total; 
} 
+0

我甚至不知道从哪里开始搜索或要搜索的关键字。谢谢sixlettervariables –

+0

没问题。每个新来的C/C++人都会被称为它的东西绊倒。 – user7116

+0

@CarlNorum,给他休息一下,搜索三元运算符很困难,因为你需要知道它是第一个被称为三元运算符的......多年前我有完全相同的问题,最终我通过搜索“问号运算符“。 – verdesmarald

回答

1

它与if语句类似。 取决于是否满足条件

n=='1'

是真还是假,操作将返回左侧:真正的,右侧为假(10)。

值可以是任何值。 1和0在这里是随机的。

if (n == '1') { 
    return 1; 
} 
else { 
    return 0; 
} 
+2

不,这是不一样的。使用三元运算符是表达式的一部分,并产生一个值。一个'if'语句不会。 –

+0

你说得对,让我编辑一下。 – hermann

+0

s/random /任意/ –

0

这里的条件运算符是这样做的:“如果n等于1,则使用1,否则使用0”。所以它会根据n的值将第一个表达式加1或0。

这是编写if/else语句的另一种方法。

3

声明

(n=='1'? 1:0) 

相当于

if (n == '1') return 1 
else return 0 

所以返回1,如果n是 '1',否则为0。

格式是:

(expression ? if-true-return-this-value : else-return-this-value) 
+0

值得一提的是,C:'n =='1''中的三元部分是多余的就足够了。 –

0

这个表达式 “(N == '1'?1:0)” 等同于if (n == '1') return 1; else return 0; 如上所述,它是在C的三元(有条件的)操作员

而我猜你的代码正在加载,然后将二进制字符串“0001010”转换为整数。