【发布时间】:2010-12-09 11:54:10
【问题描述】:
我需要找到以下 C 代码的最快等价。
int d = 1 << x; /* d=pow(2,x) */
int j = 2*d*(i / d) + (i % d);
我的想法是左移 i 的高 32 - x 位。
例如以下 x=5 的 i:
1010 1010 1010 1010
将变为:
0101 0101 0100 1010
有没有为此的汇编命令?如何快速执行此操作?
【问题讨论】:
-
您应该使用
unsigned,而不是int。您的示例具有带符号值的未定义行为(溢出)。
标签: c optimization assembly x86