【发布时间】:2013-11-24 08:38:59
【问题描述】:
对于非零无符号整数值,是否有一种有效的方法来获取 0x00000001 或 0xFFFFFFFF,而对于零而不进行分支获取 0?
我想测试几个掩码并在此基础上创建另一个掩码。基本上,我想优化以下代码:
unsigned getMask(unsigned x, unsigned masks[4])
{
return (x & masks[0] ? 1 : 0) | (x & masks[1] ? 2 : 0) |
(x & masks[2] ? 4 : 0) | (x & masks[3] ? 8 : 0);
}
我知道一些优化编译器可以处理这个问题,但即使是这样,他们究竟是如何做到的?我浏览了 Bit twiddling hacks 页面,但发现只有使用布尔条件的条件设置/清除掩码的描述,因此从 int 到 bool 的转换应该在方法。
如果没有通用的方法来解决这个问题,我如何使用 x86 汇编代码有效地解决这个问题?
【问题讨论】:
标签: performance assembly x86 bit-manipulation operations