Показать сообщение отдельно
  #10  
Старый 23.04.2010, 09:45
Аватар для Konrad
Konrad Konrad вне форума
Эксперт
 
Регистрация: 19.03.2009
Сообщения: 1,261
Репутация: 45834
По умолчанию

Разбиваем число на две части по 4 бит.
Первую часть по таблице [0..15], а вторую по этой же таблице:
Код:
bx[0]=0;
bx[1]=1;
bx[2]=1;
bx[3]=2;
bx[4]=1;
bx[5]=2;
bx[6]=2;
bx[7]=3;
bx[8]=1;
bx[9]=2;
bx[10]=2;
bx[11]=3;
bx[12]=2;
bx[13]=3;
bx[14]=3;
bx[15]=4;
Код:
000=[00000000]; s1=0; s2=0; Rez=0
001=[10000000]; s1=1; s2=0; Rez=1
002=[01000000]; s1=1; s2=0; Rez=1
003=[11000000]; s1=2; s2=0; Rez=2
004=[00100000]; s1=1; s2=0; Rez=1
005=[10100000]; s1=2; s2=0; Rez=2
006=[01100000]; s1=2; s2=0; Rez=2
007=[11100000]; s1=3; s2=0; Rez=3
008=[00010000]; s1=1; s2=0; Rez=1
009=[10010000]; s1=2; s2=0; Rez=2
010=[01010000]; s1=2; s2=0; Rez=2
011=[11010000]; s1=3; s2=0; Rez=3
012=[00110000]; s1=2; s2=0; Rez=2
013=[10110000]; s1=3; s2=0; Rez=3
014=[01110000]; s1=3; s2=0; Rez=3
015=[11110000]; s1=4; s2=0; Rez=4
016=[00001000]; s1=0; s2=1; Rez=1
017=[10001000]; s1=1; s2=1; Rez=2
018=[01001000]; s1=1; s2=1; Rez=2
019=[11001000]; s1=2; s2=1; Rez=3
020=[00101000]; s1=1; s2=1; Rez=2
021=[10101000]; s1=2; s2=1; Rez=3
022=[01101000]; s1=2; s2=1; Rez=3
023=[11101000]; s1=3; s2=1; Rez=4
024=[00011000]; s1=1; s2=1; Rez=2
025=[10011000]; s1=2; s2=1; Rez=3
026=[01011000]; s1=2; s2=1; Rez=3
027=[11011000]; s1=3; s2=1; Rez=4
028=[00111000]; s1=2; s2=1; Rez=3
029=[10111000]; s1=3; s2=1; Rez=4
030=[01111000]; s1=3; s2=1; Rez=4
031=[11111000]; s1=4; s2=1; Rez=5
032=[00000100]; s1=0; s2=1; Rez=1
033=[10000100]; s1=1; s2=1; Rez=2
034=[01000100]; s1=1; s2=1; Rez=2
035=[11000100]; s1=2; s2=1; Rez=3
036=[00100100]; s1=1; s2=1; Rez=2
037=[10100100]; s1=2; s2=1; Rez=3
038=[01100100]; s1=2; s2=1; Rez=3
039=[11100100]; s1=3; s2=1; Rez=4
040=[00010100]; s1=1; s2=1; Rez=2
041=[10010100]; s1=2; s2=1; Rez=3
042=[01010100]; s1=2; s2=1; Rez=3
043=[11010100]; s1=3; s2=1; Rez=4
044=[00110100]; s1=2; s2=1; Rez=3
045=[10110100]; s1=3; s2=1; Rez=4
046=[01110100]; s1=3; s2=1; Rez=4
047=[11110100]; s1=4; s2=1; Rez=5
048=[00001100]; s1=0; s2=2; Rez=2
049=[10001100]; s1=1; s2=2; Rez=3
050=[01001100]; s1=1; s2=2; Rez=3
051=[11001100]; s1=2; s2=2; Rez=4
052=[00101100]; s1=1; s2=2; Rez=3
053=[10101100]; s1=2; s2=2; Rez=4
054=[01101100]; s1=2; s2=2; Rez=4
055=[11101100]; s1=3; s2=2; Rez=5
056=[00011100]; s1=1; s2=2; Rez=3
057=[10011100]; s1=2; s2=2; Rez=4
058=[01011100]; s1=2; s2=2; Rez=4
059=[11011100]; s1=3; s2=2; Rez=5
060=[00111100]; s1=2; s2=2; Rez=4
061=[10111100]; s1=3; s2=2; Rez=5
062=[01111100]; s1=3; s2=2; Rez=5
063=[11111100]; s1=4; s2=2; Rez=6
064=[00000010]; s1=0; s2=1; Rez=1
065=[10000010]; s1=1; s2=1; Rez=2
066=[01000010]; s1=1; s2=1; Rez=2
067=[11000010]; s1=2; s2=1; Rez=3
068=[00100010]; s1=1; s2=1; Rez=2
069=[10100010]; s1=2; s2=1; Rez=3
070=[01100010]; s1=2; s2=1; Rez=3
071=[11100010]; s1=3; s2=1; Rez=4
072=[00010010]; s1=1; s2=1; Rez=2
073=[10010010]; s1=2; s2=1; Rez=3
074=[01010010]; s1=2; s2=1; Rez=3
075=[11010010]; s1=3; s2=1; Rez=4
076=[00110010]; s1=2; s2=1; Rez=3
077=[10110010]; s1=3; s2=1; Rez=4
078=[01110010]; s1=3; s2=1; Rez=4
079=[11110010]; s1=4; s2=1; Rez=5
080=[00001010]; s1=0; s2=2; Rez=2
081=[10001010]; s1=1; s2=2; Rez=3
082=[01001010]; s1=1; s2=2; Rez=3
083=[11001010]; s1=2; s2=2; Rez=4
084=[00101010]; s1=1; s2=2; Rez=3
085=[10101010]; s1=2; s2=2; Rez=4
086=[01101010]; s1=2; s2=2; Rez=4
087=[11101010]; s1=3; s2=2; Rez=5
088=[00011010]; s1=1; s2=2; Rez=3
089=[10011010]; s1=2; s2=2; Rez=4
090=[01011010]; s1=2; s2=2; Rez=4
091=[11011010]; s1=3; s2=2; Rez=5
092=[00111010]; s1=2; s2=2; Rez=4
093=[10111010]; s1=3; s2=2; Rez=5
094=[01111010]; s1=3; s2=2; Rez=5
095=[11111010]; s1=4; s2=2; Rez=6
096=[00000110]; s1=0; s2=2; Rez=2
097=[10000110]; s1=1; s2=2; Rez=3
098=[01000110]; s1=1; s2=2; Rez=3
099=[11000110]; s1=2; s2=2; Rez=4
100=[00100110]; s1=1; s2=2; Rez=3
101=[10100110]; s1=2; s2=2; Rez=4
102=[01100110]; s1=2; s2=2; Rez=4
103=[11100110]; s1=3; s2=2; Rez=5
104=[00010110]; s1=1; s2=2; Rez=3
105=[10010110]; s1=2; s2=2; Rez=4
106=[01010110]; s1=2; s2=2; Rez=4
107=[11010110]; s1=3; s2=2; Rez=5
108=[00110110]; s1=2; s2=2; Rez=4
109=[10110110]; s1=3; s2=2; Rez=5
110=[01110110]; s1=3; s2=2; Rez=5
111=[11110110]; s1=4; s2=2; Rez=6
112=[00001110]; s1=0; s2=3; Rez=3
113=[10001110]; s1=1; s2=3; Rez=4
114=[01001110]; s1=1; s2=3; Rez=4
115=[11001110]; s1=2; s2=3; Rez=5
116=[00101110]; s1=1; s2=3; Rez=4
117=[10101110]; s1=2; s2=3; Rez=5
118=[01101110]; s1=2; s2=3; Rez=5
119=[11101110]; s1=3; s2=3; Rez=6
120=[00011110]; s1=1; s2=3; Rez=4
121=[10011110]; s1=2; s2=3; Rez=5
122=[01011110]; s1=2; s2=3; Rez=5
123=[11011110]; s1=3; s2=3; Rez=6
124=[00111110]; s1=2; s2=3; Rez=5
125=[10111110]; s1=3; s2=3; Rez=6
126=[01111110]; s1=3; s2=3; Rez=6
127=[11111110]; s1=4; s2=3; Rez=7
128=[00000001]; s1=0; s2=1; Rez=1
129=[10000001]; s1=1; s2=1; Rez=2
130=[01000001]; s1=1; s2=1; Rez=2
131=[11000001]; s1=2; s2=1; Rez=3
132=[00100001]; s1=1; s2=1; Rez=2
133=[10100001]; s1=2; s2=1; Rez=3
134=[01100001]; s1=2; s2=1; Rez=3
135=[11100001]; s1=3; s2=1; Rez=4
136=[00010001]; s1=1; s2=1; Rez=2
137=[10010001]; s1=2; s2=1; Rez=3
138=[01010001]; s1=2; s2=1; Rez=3
139=[11010001]; s1=3; s2=1; Rez=4
140=[00110001]; s1=2; s2=1; Rez=3
141=[10110001]; s1=3; s2=1; Rez=4
142=[01110001]; s1=3; s2=1; Rez=4
143=[11110001]; s1=4; s2=1; Rez=5
144=[00001001]; s1=0; s2=2; Rez=2
145=[10001001]; s1=1; s2=2; Rez=3
146=[01001001]; s1=1; s2=2; Rez=3
147=[11001001]; s1=2; s2=2; Rez=4
148=[00101001]; s1=1; s2=2; Rez=3
149=[10101001]; s1=2; s2=2; Rez=4
150=[01101001]; s1=2; s2=2; Rez=4
151=[11101001]; s1=3; s2=2; Rez=5
152=[00011001]; s1=1; s2=2; Rez=3
153=[10011001]; s1=2; s2=2; Rez=4
154=[01011001]; s1=2; s2=2; Rez=4
155=[11011001]; s1=3; s2=2; Rez=5
156=[00111001]; s1=2; s2=2; Rez=4
157=[10111001]; s1=3; s2=2; Rez=5
158=[01111001]; s1=3; s2=2; Rez=5
159=[11111001]; s1=4; s2=2; Rez=6
160=[00000101]; s1=0; s2=2; Rez=2
161=[10000101]; s1=1; s2=2; Rez=3
162=[01000101]; s1=1; s2=2; Rez=3
163=[11000101]; s1=2; s2=2; Rez=4
164=[00100101]; s1=1; s2=2; Rez=3
165=[10100101]; s1=2; s2=2; Rez=4
166=[01100101]; s1=2; s2=2; Rez=4
167=[11100101]; s1=3; s2=2; Rez=5
168=[00010101]; s1=1; s2=2; Rez=3
169=[10010101]; s1=2; s2=2; Rez=4
170=[01010101]; s1=2; s2=2; Rez=4
171=[11010101]; s1=3; s2=2; Rez=5
172=[00110101]; s1=2; s2=2; Rez=4
173=[10110101]; s1=3; s2=2; Rez=5
174=[01110101]; s1=3; s2=2; Rez=5
175=[11110101]; s1=4; s2=2; Rez=6
176=[00001101]; s1=0; s2=3; Rez=3
177=[10001101]; s1=1; s2=3; Rez=4
178=[01001101]; s1=1; s2=3; Rez=4
179=[11001101]; s1=2; s2=3; Rez=5
180=[00101101]; s1=1; s2=3; Rez=4
181=[10101101]; s1=2; s2=3; Rez=5
182=[01101101]; s1=2; s2=3; Rez=5
183=[11101101]; s1=3; s2=3; Rez=6
184=[00011101]; s1=1; s2=3; Rez=4
185=[10011101]; s1=2; s2=3; Rez=5
186=[01011101]; s1=2; s2=3; Rez=5
187=[11011101]; s1=3; s2=3; Rez=6
188=[00111101]; s1=2; s2=3; Rez=5
189=[10111101]; s1=3; s2=3; Rez=6
190=[01111101]; s1=3; s2=3; Rez=6
191=[11111101]; s1=4; s2=3; Rez=7
192=[00000011]; s1=0; s2=2; Rez=2
193=[10000011]; s1=1; s2=2; Rez=3
194=[01000011]; s1=1; s2=2; Rez=3
195=[11000011]; s1=2; s2=2; Rez=4
196=[00100011]; s1=1; s2=2; Rez=3
197=[10100011]; s1=2; s2=2; Rez=4
198=[01100011]; s1=2; s2=2; Rez=4
199=[11100011]; s1=3; s2=2; Rez=5
200=[00010011]; s1=1; s2=2; Rez=3
201=[10010011]; s1=2; s2=2; Rez=4
202=[01010011]; s1=2; s2=2; Rez=4
203=[11010011]; s1=3; s2=2; Rez=5
204=[00110011]; s1=2; s2=2; Rez=4
205=[10110011]; s1=3; s2=2; Rez=5
206=[01110011]; s1=3; s2=2; Rez=5
207=[11110011]; s1=4; s2=2; Rez=6
208=[00001011]; s1=0; s2=3; Rez=3
209=[10001011]; s1=1; s2=3; Rez=4
210=[01001011]; s1=1; s2=3; Rez=4
211=[11001011]; s1=2; s2=3; Rez=5
212=[00101011]; s1=1; s2=3; Rez=4
213=[10101011]; s1=2; s2=3; Rez=5
214=[01101011]; s1=2; s2=3; Rez=5
215=[11101011]; s1=3; s2=3; Rez=6
216=[00011011]; s1=1; s2=3; Rez=4
217=[10011011]; s1=2; s2=3; Rez=5
218=[01011011]; s1=2; s2=3; Rez=5
219=[11011011]; s1=3; s2=3; Rez=6
220=[00111011]; s1=2; s2=3; Rez=5
221=[10111011]; s1=3; s2=3; Rez=6
222=[01111011]; s1=3; s2=3; Rez=6
223=[11111011]; s1=4; s2=3; Rez=7
224=[00000111]; s1=0; s2=3; Rez=3
225=[10000111]; s1=1; s2=3; Rez=4
226=[01000111]; s1=1; s2=3; Rez=4
227=[11000111]; s1=2; s2=3; Rez=5
228=[00100111]; s1=1; s2=3; Rez=4
229=[10100111]; s1=2; s2=3; Rez=5
230=[01100111]; s1=2; s2=3; Rez=5
231=[11100111]; s1=3; s2=3; Rez=6
232=[00010111]; s1=1; s2=3; Rez=4
233=[10010111]; s1=2; s2=3; Rez=5
234=[01010111]; s1=2; s2=3; Rez=5
235=[11010111]; s1=3; s2=3; Rez=6
236=[00110111]; s1=2; s2=3; Rez=5
237=[10110111]; s1=3; s2=3; Rez=6
238=[01110111]; s1=3; s2=3; Rez=6
239=[11110111]; s1=4; s2=3; Rez=7
240=[00001111]; s1=0; s2=4; Rez=4
241=[10001111]; s1=1; s2=4; Rez=5
242=[01001111]; s1=1; s2=4; Rez=5
243=[11001111]; s1=2; s2=4; Rez=6
244=[00101111]; s1=1; s2=4; Rez=5
245=[10101111]; s1=2; s2=4; Rez=6
246=[01101111]; s1=2; s2=4; Rez=6
247=[11101111]; s1=3; s2=4; Rez=7
248=[00011111]; s1=1; s2=4; Rez=5
249=[10011111]; s1=2; s2=4; Rez=6
250=[01011111]; s1=2; s2=4; Rez=6
251=[11011111]; s1=3; s2=4; Rez=7
252=[00111111]; s1=2; s2=4; Rez=6
253=[10111111]; s1=3; s2=4; Rez=7
254=[01111111]; s1=3; s2=4; Rez=7
255=[11111111]; s1=4; s2=4; Rez=8
Сам же код:
Код:
function SumBit(B : Byte) : Byte;
const
bx:array[0..15]of byte=(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);
begin
Result:=bx[B mod 16]+bx[B shr 4];
end;
Что в 3 раза быстрее предложенного варианта.
Правда память...
Ответить с цитированием