2014-12-19 32 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

相關問題