2012-09-26 86 views
1

讓我們的加位掩碼狀態字節數組:多一點更優雅的解決方案轉移

char status[10]; 

現在,讓我們說,我們要拉三號位出每個狀態字節,並把它們變成一個int ,其中所述LSB的int是狀態[0]比特3,下一個是狀態[1]位3等

int foobits = 0; 
for(i = 0; i < 10; i++) 
{ 
    foobits |= ((status[i] & 0x04) >> 2) << i; 
} 

我的問題是:是否有實現該目的的另一種方式涉及僅一個移?

編輯:我試圖使用foobits來包含status [i]位#3s的位數組。

+0

你爲什麼會擔心換班?無論如何,這在大多數CPU上都是CPU指令。 –

+0

如果一切順利,爲什麼要擔心? –

+0

它可以在數據只移動一次的地方完成,但是它的代碼更多,速度更慢。這個代碼和它將要獲得的一樣好。 –

回答

3

你能做到這一點

int foobits = 0; 
for(i = 0; i < 10; i++) 
{ 
    foobits |= (status[i] & 0x04) << i; 
} 
foobits >>= 2; 

但何必呢?

「不成熟的優化是萬惡之源。」 - 唐納德克努特

+0

哦,是的,我想這也可以。 –

相關問題