C:声明“返回A ||”当A> 1时,1'返回?

时间:2010-08-10 16:03:05

标签: c objective-c

虽然我不会自己编写,但A(保证为零或正整数)大于1时,以下语句的预期结果是什么?

return A || 1;

在许多语言中,我希望返回A,除非A的值为零,在这种情况下为1。

我手边没有我的C书,但我注意到实际上,值1似乎总是被退回。这是编译器优化的结果还是给出了表达式的潜在歧义,是否返回值是非确定性的?

6 个答案:

答案 0 :(得分:18)

标准说

  

||运算符如果其任一操作数比较不等于0,则应得1;否则,它产生0.结果的类型为int。

standard的第6.5.14节。

答案 1 :(得分:3)

预期结果为YES(或true)

||运算符如果其操作数中至少有一个为真,则返回true值(代码中的第二个操作数显然为真)

答案 2 :(得分:2)

这是直接C(不涉及Objective-C)。它将始终返回1.

答案 3 :(得分:0)

在C中,||&&!的结果始终是01,绝不是任何其他非零值,无论如何操作数的值。这意味着您的A || 1将始终产生1。

答案 4 :(得分:0)

使用基于C语言的任何非零值都为true(由1表示)。如果您的A为零,它将检查其他比较是否为OR比较

我只想说,在你的例子中,无论A的值是多少,即使你使用的是||也总是返回1 2.使用2非零,当使用逻辑运算符OR执行时,将始终返回true(由1表示)

答案 5 :(得分:0)

我相信编译器会优化甚至不检查A的值。有人可以确认吗?我的印象是A&& 0,A || 1和A || 0(= A&& 1),编译器通过识别表达式可以简化为0,1或分别是。