int value;
Run Code Online (Sandbox Code Playgroud)
if (value % 2) {...}
if (value % 2 != 0) {...}
我知道第二个更容易阅读,但哪个在C,1或2中效率更高?为什么?
它们完全相同.if语句中的任何条件都会在其为真(非零)或假(零)时进行测试,因此即使您没有将测试写为零,生成的代码也会为您进行测试.
从C11标准:
6.8.4.1 if语句:
[...]在两种形式中,如果表达式比较不等于0,则执行第一个子语句.
编辑:您还可以通过查看生成的代码为编译器验证这一点.在我的情况下(GCC 2.4.9),这两个表单都产生了这个代码:
movl -4(%rbp), %eax ; Load `value` into eax
andl $1, %eax ; % 2 (same as & 1)
testl %eax, %eax ; is it zero?
je .L2 ; yes, jump
Run Code Online (Sandbox Code Playgroud)
我编译没有优化(-O0),只是为了解决这个问题.