Mam pewien algorytm dotyczacy mnozenia macierzy. Wszystko rozumie tylko w jezyku pascal nie pasuje mi jedna konstrukcja, dokladniej nie wiem dlaczego akurat tak musi byc.
Fragment algorytmu
"Dopóki k jest większe od zera, testujemy najmłodszy bit k i jeśli ma on wartość 1, to wykonujemy mnożenie W = W × A. Bity k przesuwamy o 1 w prawo, aby pozbyć się testowanego bitu. Jeśli po tej operacji k ma wartość 0, to potęgowanie jest zakończone i przerywamy pętlę"
a w jezyku pascal to jest
while k > 0 do
begin
if k and 1 = 1 then // testujemy najmłodszy bit k
begin
mnoz(n,W,A,P); // jeśli ustawiony, to
przepisz(n,P,W); // W = W x A
end;
k := k shr 1; // przesuwamy bity k w prawo
if k = 0 then break; // jeśli brak bitów 1, przerywamy
mnoz(n,A,A,P); // A = A x A
przepisz(n,P,A);
end;
Nie rozumie linijki if k and 1 = 1 then
Co nam daje te porownanie 1 = 1 ? Bez tego program nie dziala.