这对计算机来说要快得多:if(x == 0)或if(!x)

use*_*988 2 performance

哪个是更好的编码实践,我确信这取决于机器级别的情况.

我应该这样做

if (x == 0)
Run Code Online (Sandbox Code Playgroud)

要么

if (!x)
Run Code Online (Sandbox Code Playgroud)

Jer*_*oen 5

最好的编码实践取决于你想做什么.如果要检查整数x是否等于0,请使用x==0.如果要检查布尔值x是否为真,请使用!x.

如果您正在寻找最佳代码:它们都同样快速.两个陈述都做同样的事情.他们检查是否设置了标志.编译器应该知道您正在尝试做同等的事情,从而产生相同或非常相似的输出.特别是在优化之后,性能应该没有任何差别.

x86处理器中,这些通常通过cmp操作和条件跳转来完成.它们分别比较两个"变量"或更正确的寄存器,并根据结果进行条件跳转(例如,x为0).

除非您的编译器"正在",否则它应该生成相同的代码而不管处理器类型(假设2个条件实际上与您的语言相同).


我还想补充一点,在弱类型语言中,特别是在解释时(例如PHP)可能会有一些开销.在这种情况下,它取决于x是布尔值还是整数.虽然这些也可以进行优化,但在任何情况下最好都具备可读性.您将获得的任何性能提升都是可忽略的,可读性更为重要.例如,!x可能会混淆思考的人x是布尔值,而实际上它是一个整数.

这些差异很有趣,但如果它存在,性能增益很小.

  • @thecoshman可以安全地假设OP没有完全重新启动,并且两个语句具有相同的结果. (6认同)
  • @JeroenBollen"退了吗?",他_retorted_ :) (2认同)