![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
XOR для массива
MikeZ © (2006-06-04 16:30:00)Всем день добрый!
Надо сделать XOR для чисел, являющихся элементами массива.
Сейчас делаю a[i] xor b[i], перебирая так весь массив.
Есть ли какой-нибудь способ делать это по-красивее и, главное, побыстрее.
MikeZ (2006-06-04 21:54:00) [61]Спасибо за ответ, попробуем
Rial (2006-06-04 20:15:00) [62]Но, между прочим, в случае с массивом, если пробегать просто все элементы,
то мой способ примерно в 3.5 раза быстрее.
Rial (2006-06-04 20:14:00) [63]procedure XorData(Const MainData,KeyData :Pointer;Const MainSize,KeySize :Integer);
Var ptMain, ptKey : PByte;
I, J, D : Integer;
begin
If (MainSize<=0)or(KeySize<=0)then Exit;
D :=MainSize div KeySize;
ptMain :=MainData;
I :=0;
While (I<=D-1)do begin
ptKey :=KeyData;
J :=0;
While (J<=KeySize-1)do begin
ptMain^:=ptMain^ xor ptKey^;
Inc (ptMain);
Inc (ptKey);
Inc (J);
end;
Inc(I);
end;
D :=MainSize mod KeySize;
ptKey :=KeyData;
J:=0;
While (J<=D-1)do begin
ptMain^:=ptMain^ xor ptKey^;
Inc (ptMain);
Inc (ptKey);
Inc (J);
end;
end;
Не знаю, куда быстрее.
При сравнении с вариантом, написанном мною на асме, разницы
заметной не нашел.
Возможно, а плохо знаю ассемблер...
Asteroid (2006-06-04 20:08:00) [64]Не уверен, что это возможно, разве что можно ускорить процесс ассемблерной вставкой с операциями на XMM регистрах (movq, pxor).
Kolan (2006-06-04 18:52:00) [65]
> Rial © (04.06.06 18:12) [1]
Я думаю автор хочек каким-то хитрым образом(может сдвигом каким-то) проXORить сразу весь массив... Мне тоже интересно возможно ли это.
Rial (2006-06-04 18:12:00) [66]Это и так достаточно быстро и кравиво.
Быстродействие проверял ?
Точно уж быстрее записи, чтения и т.п. на порядок.