Текущий архив: 2009.05.03;
Скачать: CL | DM;
Вниз
Количество единиц в байте Найти похожие ветки
← →
cyber-pilot (2009-03-25 22:15) [0]В переменной типа Byte хранится число, нужно подсчитать число единичных разрядов в нем. Например, если в переменной записано число 01100111, то в результате должно получиться 5.
Как сделать это наиболее быстро?
← →
Тын-Дын © (2009-03-25 22:21) [1]var
b: Byte;
begin
Result := 0;
b := $67;
for i := 0 to 7 do Result := Result + ((b shr i) and 1);
end;
← →
sniknik © (2009-03-25 22:44) [2]> наиболее быстро?
const
ar: array[0..255] of byte = (0, 1, 1, 2, 1, 2, 2, 3 ... и т.д.);
begin
b:= $67;
result:= ar[b];
end;
← →
korneley © (2009-03-25 23:31) [3]
> sniknik © (25.03.09 22:44) [2]
:))) Следующий вопрос будет: "А почему элементыar: array[0..255] of byte
не по возрастанию?"
Ещё метода
в [1] внутре цикла
Result := Result + integer(Odd(b));
b := b shr 1;
Но [2] всё равно быстрее... Да и [1] (возможно) тоже :)
← →
cyber-pilot (2009-03-25 23:42) [4]Всем спасибо!
sniknik, тебе особое спасибо. Это действительно самый быстрый способ.
← →
Германн © (2009-03-26 00:36) [5]
> cyber-pilot (25.03.09 23:42) [4]
>
> Всем спасибо!
> sniknik, тебе особое спасибо. Это действительно самый быстрый
> способ.
>
Да самый быстрый. И не только для данной задачи.
← →
KilkennyCat © (2009-03-26 00:45) [6]result = cuanone(bintostr(inttobin(x)));
%)
← →
korneley © (2009-03-26 01:15) [7]
> KilkennyCat © (26.03.09 00:45) [6]
Ну, эта... Тут, таки, Delphi как никак :) И быстрей индексации, имхо, всё равно не получится :Р
← →
SP (2009-03-26 12:52) [8]
Result := a - (a shr 1) - (a shr 2) - (a shr 3) - (a shr 4) - (a shr 5) - (a shr 6) - (a shr 7);
Страницы: 1 вся ветка
Текущий архив: 2009.05.03;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.177 c