Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.014 c
15-1236073702
Юрий
2009-03-03 12:48
2009.05.03
С днем рождения ! 29 февраля 2009


2-1237739173
dron9999
2009-03-22 19:26
2009.05.03
Как в мемо удалять текст по 1-й букве с концa


6-1202735762
gear
2008-02-11 16:16
2009.05.03
Как выключить HTTP/1.1 и включить HTTP/1.0 в WININET?


11-1200007217
!Pharaon!
2008-01-11 02:20
2009.05.03
ListView и Thumbnail (Эскизы изображений)


15-1235971946
TELOvek
2009-03-02 08:32
2009.05.03
Получить картинку из Word