Napisz co chcesz osiągnąć na przykładach, czyli kilka danych wejściowych i ich odpowiedniki wyjścia.
Co do kodu:
Result:=0;
for i:=0 to 7 do
if Boolean(Maska and LongWord(1 shl i)) then
Result:=Result+(Dana and (1 shl i));
To co by on nie liczył:
1)
if Boolean(operacja-bitowa)
- nie wygląda dobrze (styl), powinno być raczej:
if (operacja-bitowa)<> 0 then
-
dwa razy liczysz (1 shl i) w każdym kroku pętli
-
przesuwasz w każdym kroku pętli i razy zamiast raz (styl):
Result:=0;
SMaska := 1;
for i:=0 to 7 do
begin
if Maska and SMaska <> 0 then
begin
Result := Result + (Dana and SMaska);
end;
SMaska := SMaska shl 1;
end;
- kod:
Result := Result+(Dana and (1 shl i));
jest podejrzany, bo jak ktoś napisał wynika z niego, że potrzebujesz po prostu funkcji:
function PozostawBity(Dana,Maska: byte):byte; overload;
begin
Result:= Dana and Maska;
end;
A przecież nie robił byś do tego funkcji chyba?