2017-09-07 27 views
0

我有以下多維char數組。我需要先將XOR之一的數組與掩碼數組結合,然後將AND結果與另一個數組結合。什麼是最快的實施方式?如何在c中的多維char數組上執行位操作

注意:char數組的大小可以大到20 KB。

unsigned char test1[2][2] = { { 'a','b' },{ 0 } }; 
unsigned char test2[2][2] = { { 0 },{ 'O','S' } }; 
unsigned char mask[2][2] = { 0 }; 
+0

您能保證測試數組中的值始終與掩碼進行「與」操作嗎?面具是否改變? – Gerhardh

+0

mask永遠不會改變@ Gerhardh – George

回答

0

類似的東西,可能是快:

int cnt = sizeof(mask)/sizeof(unsigned char) 

while(cnt>0) 
{ 
    *((unsigned char*)test1+cnt) ^= *((unsigned char*)mask+cnt); 
    *((unsigned char*)test1+cnt) &= *((unsigned char*)test2+cnt); 
    cnt--; 
} 

只有一次通過陣列的方式,只移動3指針至極可以被編譯器很好的優化。要達到最高效率,我們必須做一些測試並看到裝配輸出。 IT也取決於您使用的架構(X86,ARM,AVR,PIC,...)

+2

@George:爲了加快速度,需要加載寄存器保持的最大整數(架構依賴),而不是加載一個字符。請閱讀此處:https://stackoverflow.com/a/21336509/8051589。 –

+0

XOR實際上不起作用。操作後,test1的值保持不變。我也嘗試在另一個數組上分配XOR結果,結果仍然相同,XOR操作不起作用。 @AndreKampling – George

+0

@George掩碼的值是多少?與例子中的0一樣,XOR不做任何事情。 – Julien