Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.13;
Скачать: CL | DM;

Вниз

Бинарные операции   Найти похожие ветки 

 
Нуждающийся в помощи   (2005-02-25 10:14) [0]

Прошу помощи в решении вот такой задачи:

Есть i: array [1..1000000000] of integer, и есть еще четыре массива b: array [1..1000000000] of byte.
Нужно наиболее быстро сформировать значения для четырех байтовых масивом по такому принципу:
b1[1]=первые восемь бит i[1];
b2[1]=вторые восемь бит i[1];
b3[1]=третьи восемь бит i[1];
b4[1]=четвертые восемь бит i[1]

Сейчас преобразую integer в бинарную строку, после чего используя pos беру нужные тетрады и преобразую обратно в byte.
Но чуствую, что это совсем не самый скоростной вариант.


 
TUser ©   (2005-02-25 10:19) [1]

CopyMemory

Но очень плохо, что копировать придется по одному байту. Если возможно организуй так - b1[1]-b1[4] = i[1] и т.д., т.е. b1 = i[1..length(i) div 4], далее b2 и пр.


 
Anatoly Podgoretsky ©   (2005-02-25 10:26) [2]

Размер этих массивов 8 гб


 
Digitman ©   (2005-02-25 10:33) [3]

var
 iarray: array[1..10] of Integer;

 b1, b2, b3, b4: array[1..10] of Byte;
 barrays: array[0..3] of PByteArray = (@b1, @b2, @b3, @b4);

 i, j: Integer;

...
 for i := 1 to 10 do
   for j := 0 to 3 do
     barrays[j][i] := PByteArray(@iarray[i])[j];


 
Юрий Зотов ©   (2005-02-25 10:38) [4]

type
 PBytes = ^TBytes;
 TBytes = packed record
   i4, i3, i2, i1: byte
 end;

var
 P: PBytes;
...
for j := 1 to 1000000000 do
begin
 P := @i[j];
 b1[j] := P^.i1;
 b2[j] := P^.i2;
 b3[j] := P^.i3;
 b4[j] := P^.i4
end;



Страницы: 1 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.049 c
1-1109423217
Толян
2005-02-26 16:06
2005.03.13
клиент сервер по базе данных


8-1101404974
_PG_
2004-11-25 20:49
2005.03.13
Видео растянуть на панель


14-1108885148
__max__
2005-02-20 10:39
2005.03.13
Шифрование файлов в ф.с. NTFS


3-1108019366
Dmitry
2005-02-10 10:09
2005.03.13
Проблемы с Firebird 1.5?


3-1108095477
КиТаЯц
2005-02-11 07:17
2005.03.13
FireBird. Селект с днями недели