虽然我不会自己编写,但A
(保证为零或正整数)大于1时,以下语句的预期结果是什么?
return A || 1;
在许多语言中,我希望返回A
,除非A
的值为零,在这种情况下为1。
我手边没有我的C书,但我注意到实际上,值1似乎总是被退回。这是编译器优化的结果还是给出了表达式的潜在歧义,是否返回值是非确定性的?
答案 0 :(得分:18)
答案 1 :(得分:3)
预期结果为YES(或true)
||
运算符如果其操作数中至少有一个为真,则返回true值(代码中的第二个操作数显然为真)
答案 2 :(得分:2)
这是直接C(不涉及Objective-C)。它将始终返回1.
答案 3 :(得分:0)
在C中,||
,&&
或!
的结果始终是0
或1
,绝不是任何其他非零值,无论如何操作数的值。这意味着您的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或分别是。