我需要找到以下 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
有没有汇编命令?如何快速执行此操作?
最佳答案
split 很慢:
int m = (1 << x) - 1;
int j = (i << 1) - (i & m);
更新:
或者可能更快:
int j = i + (i & (~0 << x));
关于c - 仅左移数字的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4397897/