2014-02-16 44 views
0

如果我有20 2D陣列的長度數組c轉換爲十進制

長度的

5個表示爲比特

int bitsval[6]; 

整數,陣列看起來像例如bitsval = { 0,0,1,0,1,0}

,我想十進制值所以像

(2^0 X 0)+(2^1×1)+(2^2× 0)...並最終返回最終值10

可有人幫忙寫這樣的函數

+5

這個問題似乎是無關緊要的,因爲它沒有顯示解決問題的嘗試。 –

回答

4

這看起來像一個家庭作業問題的功能,所以我會幫忙,但不給你的代碼

你需要做的是有一個'total'變量和'當前位值'變量。

開始與「當前位值得」變量等於32(2^5)

然後,有一個循環經歷的陣列,將所述位值得到總如果所述位是「1」

每次你去下一個元素,你需要一半的「當前位身價」值

[編輯]

OK數組中 - 如果不是功課,試試這個:

total = 0; 
bitvalue= 32; 
for (i = 0; i < 6; i++) { 
    if (bitsval[i]) total += bitvalue; 
    bitvalue /= 2; 
} 
+0

它不是一個真正的家庭作業問題,它是一個小工具,我需要一個更大的程序,即時編譯在正確的軌道上即時編輯我明白,我需要類似這樣的東西,但即時獲取搞亂2^0和2^1 :( – theForgottenCoder

+0

好的,如果它不是作業,我已經將示例代碼添加到我的答案 – pscs

0

這應該工作我猜。

#include<math.h> 
#include<stdio.h> 
void main() 
{ 
int a[]={1,0,0,1,0}; 
int sum=0; 
for(int i=0; i<sizeof(a)/2; i++) 
{ 
if(a[i]==1) 
sum+=pow(2,(sizeof(a)/2)-i-1); 
} 
} 
+1

a)使用pow()效率非常低 b)如果整數不是2個字節,則不起作用 - 使用「sizeof a)/ sizeof(a [0])「 – pscs

0

沒有進入任何一種二進制的,而純粹是你在這裏解釋過的工作是什麼,應該工作:

#include <stdio.h> 
#include <math.h> 

int main(){ 

    int number[6] = {0,0,1,0,1,0}, result = 0; 

    for (int x = 5; x >= 0; --x){ 

    result += (number[x] * (int) pow(2, 5-x)); 

    } 

    printf("Final result: %d\n", result); 

    return 0; 

} 

你會偏離航向有按摩它適合