0

我想知道哪一段代码会运行得更快,因为我想尽可能地优化。

代码一:

if(((a & 0x0FFF) + (b & 0x0FFF)) & 0x1000 != 0)
{
    Register.setHCarryFlag(true);
}
else
{
    Register.setHCarryFlag(false);
}

代码 B:

Register.setHCarryFlag(((a & 0x0FFF) + (b & 0x0FFF))& 0x1000 != 0);

我问的原因是我怀疑代码 B 没有分支,但我不确定如何将每个代码转换为机器代码。

更好的是,有没有办法查看每段代码生成的机器代码?

4

2 回答 2

3

不管你怎么转,第二种方法会更安全,因为那里基本上没有分支,只是纯粹的计算。一个好的 JIT 编译器可能会认识到您在第一个示例中的分支可以被消除,但为什么要让 JIT 和人类读者更难呢?

于 2015-08-30T09:52:28.963 回答
0
if(__CONDITION_TRUE_?_) 
{
    return true;
} 
else 
{
    return false;
} 

应始终写为

return __CONDITION_TRUE_?_;
于 2015-08-31T11:39:49.933 回答