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超出了这种情况呢?
从我在架构课程中回忆的内容来看,我相信它们应该同样快速.两者都有2条指令.
第一个例子1.将b否定为临时寄存器2.比较临时寄存器等于0
第二个例子1.将b中的0xff减去温度寄存器2.比较临时寄存器等于0
这些基本相同,而且,即使您的特定架构需要比这更多或更少,它真的值得纳秒的一小部分吗?花了几分钟才回答这个问题.