我有以下多維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 };
我有以下多維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 };
類似的東西,可能是快:
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,...)
您能保證測試數組中的值始終與掩碼進行「與」操作嗎?面具是否改變? – Gerhardh
mask永遠不會改變@ Gerhardh – George