在C中,会不会比b == 0xff更快?~b?

Jam*_*ris 1 c optimization comparison bits

从很久以前,我有一个记忆,我一直坚持认为与零的比较比任何其他值都快(ahem Z80).

在我写的一些C代码中,我想跳过设置了所有位的值.目前这些值的类型char可能会发生变化.我有两种不同的替代方法来执行测试:

if (!~b)
    /* skip */
Run Code Online (Sandbox Code Playgroud)

if (b == 0xff)
    /* skip */
Run Code Online (Sandbox Code Playgroud)

除了后者假设b是一个8位字符而前者没有,前者会因为旧的零优化技巧比较快,还是今天的CPU超出了这种情况呢?

Aid*_*ell 10

如果速度更快,编译器会替换它.

通常,您不能编写C比编译器可以优化它更好.无论如何它都是特定于架构的.

简而言之,除非亚微纳秒非常重要,否则不要担心


Tes*_*rex 7

从我在架构课程中回忆的内容来看,我相信它们应该同样快速.两者都有2条指令.

第一个例子1.将b否定为临时寄存器2.比较临时寄存器等于0

第二个例子1.将b中的0xff减去温度寄存器2.比较临时寄存器等于0

这些基本相同,而且,即使您的特定架构需要比这更多或更少,它真的值得纳秒的一小部分吗?花了几分钟才回答这个问题.