c - 仅左移数字的一部分

标签 c optimization assembly x86

我需要找到以下 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/

相关文章:

java - 以下代码的复杂度是多少?

performance - 在x86汇编中将寄存器设置为零的最佳方法是什么:xor,mov或and?

Assembly/Nasm - 段错误(核心转储)错误

C# 使用带有指针等的 C 库

c++ - 如何使用指针从不同的函数访问局部变量?

iphone - 从影片剪辑中获取确切的帧数

performance - 分支错误预测在哈希表查找性能中起什么作用?

optimization - GHC 没有优化除主模块以外的模块

c - _dl_sysinfo_int80 的用途是什么?

c - 条件移动优化是否针对 C 标准?