2014-10-09 46 views
-1

我来到一个竞争力的薪资问题肚里如下:A> B> C评价当每个人都有数字值

查找的输出:

#include <stdio.h> 
int main(void) { 
    int a=5, b=10, c=5; 
    int x; 
    x = a>b>c; 
    printf("%d\n", x); 
    return 0; 
} 

编译器响应0

我的解释是,这也许是左右评估的副作用。我的猜测是,首先b>c被评估为(假设它先被推入堆栈,这里我很困惑,因为我知道>从左到右的相关性),其结果为真。这个真实变量的值是一个数字> 0(我们不知道),其中a > that_value被评估,产生结果。不过我可能是错的!

关于如何评估输出的任何指针/见解将会很有用。 谢谢。

编辑:我测试了一个非常旧的编译器,给了1,这是我的错误,纠正它。

+0

负面选民,请解释你的否定投票的原因?所以我可以纠正它! – 2014-10-09 09:52:05

+0

我没有得到downvote,因为这看起来很奇怪和有趣。但是,“一些编译器”?什么编译器给出什么输出? – user2504380 2014-10-09 09:53:14

+0

我怀疑你会发现一个编译器可以回答0以外的任何内容。语言规范一直清楚'>'运算符从左到右的相关性。 – Jens 2014-10-09 09:55:12

回答

4

C编译器从上到下,从左到右读取代码。
这里,a>b>c => 5> 10> C => 0> 5(假由0 representated)=> 0


所以,答案应该是0对于大多数随后的这个顺序的编译器的优先

有关Order of Operation

+1

+1,但这不是因为编译器从左到右读取代码,而是因为<<的关联性是从左到右。 – 2014-10-09 10:04:17

+0

@YuHao我对C中不推送表达式的部分感到困惑,内部的评估应该是正确的? – 2014-10-09 10:07:49

+0

@余浩没错。与其他运营商'+'的结合性是向左_ – Baldrickk 2014-10-09 10:10:07

3

更多详细信息对于相关性为从左到右所以总是你应该得到0.关系运算符我想知道你对一些编译器有1。