Bardzo nietypowe zachowanie instrukcji warunkowej z AND'em

0

Analizując kod źródłowy jednej aplikacji natrafiłem na dość nietypową dla mnie instrukcję, a raczej warunek:

if (n and k) = 0 then

"n" i "k" to zmienne typu integer.

Poniżej kod w którym użyta jest ta instrukcja:

Program gen;
var n,k:integer;
begin

  for n:=0 to 10 do
  begin
    for k:=0 to 10 do
    begin
      if (n and k) = 0 then
      begin

        writeln('n = ',n,' k = ',k);

      end;
    end;
  end;

  readLn;
end.

A oto wynik zwracany przez tę aplikacje:

n = 0 k = 0
n = 0 k = 1
n = 0 k = 2
n = 0 k = 3
n = 0 k = 4
n = 0 k = 5
n = 0 k = 6
n = 0 k = 7
n = 0 k = 8
n = 0 k = 9
n = 0 k = 10
n = 1 k = 0
n = 1 k = 2
n = 1 k = 4
n = 1 k = 6
n = 1 k = 8
n = 1 k = 10
n = 2 k = 0
n = 2 k = 1
n = 2 k = 4
n = 2 k = 5
n = 2 k = 8
n = 2 k = 9
n = 3 k = 0
n = 3 k = 4
n = 3 k = 8
n = 4 k = 0
n = 4 k = 1
n = 4 k = 2
n = 4 k = 3
n = 4 k = 8
n = 4 k = 9
n = 4 k = 10
n = 5 k = 0
n = 5 k = 2
n = 5 k = 8
n = 5 k = 10
n = 6 k = 0
n = 6 k = 1
n = 6 k = 8
n = 6 k = 9
n = 7 k = 0
n = 7 k = 8
n = 8 k = 0
n = 8 k = 1
n = 8 k = 2
n = 8 k = 3
n = 8 k = 4
n = 8 k = 5
n = 8 k = 6
n = 8 k = 7
n = 9 k = 0
n = 9 k = 2
n = 9 k = 4
n = 9 k = 6
n = 10 k = 0
n = 10 k = 1
n = 10 k = 4
n = 10 k = 5

Czy ktoś jest mi w stanie wyjaśnić w jakiej sytuacji warunek ten jest prawdziwy? Nie potrafię znaleźć żadnego powiązania pomiędzy zwracanymi wartościami.

1

no przecież masz tam napisane kiedy warunek jest prawdziwy - kiedy n and k = 0. A teraz małe wyjaśnienie aby to zrozumieć musisz wiedzieć co to jest system dwójkowy, jak wyglądają liczby od 0 do 10 w tym systemie, co to jest bit i jaki wynik ma operacja and dla pary bitów

0

Na przykład liczby 5 i 8 w systemie binarnym można zapisać 4-bitowo:
n = 5 = 0101B
k = 8 = 1000B

    0101B
and 1000B
    -----
    0000B = 0

    0101B
 or 1000B
    -----
    1101B = 13

    0101B
xor 1000B
    -----
    1101B = 13

1 użytkowników online, w tym zalogowanych: 0, gości: 1