2014-12-19 60 views
0

我想创建一个查找表/数组。数组大小为n的形式为k = 2^n的键的查找表

我得到的指数值的形式为k = 2^n 只有,其中n是一个整数。所以我想将数组大小减小到n,因此我也必须对索引值执行操作。

我想要在嵌入式平台上进行编程的最有效方式。

实施例:

我得到的值N = {1,2,4,8,16,32}​​

我有一个数组定义为:

int myArray[6]; 

现在我想将值n转换为m,其中m = {1,2,3,4,5,6},因此我可以访问数组元素:

myArray[m]; 
+0

散列表怎么办? – Rerito

+0

http://stackoverflow.com/q/53161/812912 –

+0

@Rerito可能不是一个很好的解决方案在嵌入式系统上。根据处理器的不同,可以通过汇编调用(BSR for i86)找到整数的最高位。然后,您只需将其用于查找值。 – IdeaHat

回答

1

这是一个解决方案

#include <stdio.h> 

int main() 
{ 
    int array[6] = {1, 2, 4, 8, 16, 32}; 
    int index[6]; 
    int i; 

    for (i = 0 ; i < 6 ; i++) 
    { 
     int value; 

     value = array[i]; 
     index[i] = 0; 
     while ((value >>= 1) != 0) 
      index[i] += 1; 
     printf("%d\n", index[i]); 
    } 
    return 0; 
} 
+0

'array [i] >> i == 1'对于任何输入,因为它们是两个完美的幂。现在假设我们引入了一个间隙(如'{2,4,8,16,32,64}',那么这将产生到'{2,3,4,5,6,7}',并且7是一个无效索引... – Rerito

+0

这就是主意 –

+0

是不是要提取每个输入的log(。)'(当然是2个基准日志)? – Rerito

相关问题