2011-07-28 34 views
0

我想在C中記錄一個進程,我需要一個更簡單的解決方案。從幾個項目計算值

我有一個狀態字節,其中的每個位表示某個設備是否打開。每臺設備都有一個固定的功耗率,我想根據其開/關狀態記錄用電量。

所以,我有一個結構稱爲equip_totals和使用率作爲成員,equip1 ...

struct { 
     unsigned int equip1; 
     unsigned int equip2; 
     ... 
     } equip_totals; 

和更新,我使用了相當長的功能,我想簡化

void update_equip_status(char *equip_status) 
{ 
if (&equip_staus = 0x01) 
equip_totals.equip1 = consumption_rate*time; 
if... 
} 

如果您有任何想法,我將不勝感激。

回答

1

替換陣列equip_totals並使用下面的循環

void update_equip_status(char *equip_status) { 
    for (int i = 0; equip_status; i++) { 
     if (equip_status & 1) 
      equip_totals[i] = consumption_rate*time; 
     equip_status >>= 1; 
    } 
} 
+0

感謝您的建議 – Programmer

+0

爲什麼要感謝您有能力答覆或更好的答案 - 接受它 –

+0

我接受答案! – Programmer

2

使用一個簡單的陣列:unsigned int equip_totals[8];

也,這將是更好地簡單地通過值傳遞equip_status

for(int i=0; equip_status != 0; i++, equip_status /= 2) 
    if (equip_status & 1) 
     equip_totals[i] = consumption_rate*time; 
+0

我曾經想過,但那不是問題。我想用equip_status更新一次,而不是寫每個組合的更新.. – Programmer

+0

...和更新函數中的'for'循環。 – Nemo