Форум: "Основная";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизБинарные операции Найти похожие ветки
← →
Нуждающийся в помощи (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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c