Operacje bitowe - prośba o wytłumaczenie działania kodu

0

Witam mam pytanie do przykładu na operacje bitand

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

void itob(unsigned a)
{
  for(unsigned m = 8; m > 0; m >>= 1){ cout << ((a & m) ? "1" : "0");cout << "m" << m << endl;}
}

int main()
{
  srand(time(NULL));
  unsigned x = rand() % 16;
  unsigned y = rand() % 16;
  cout << x << endl;
  cout << y << endl;
  cout << (x | y) << endl;
  itob(x);
  cout << " | ";
  itob(y);
  cout << " = ";
  itob(x | y); // tutaj dokonujemy alternatywy bitów
  cout << endl;
  return 0;
}

chodzi mi o to że nie wiem dokładnie o co chodzi w:

 for(unsigned m = 8; m > 0; m >>= 1){ cout << ((a & m) ? "1" : "0");cout << "m" << m << endl

bo mam m równe 8 później 4 , 2 i 1 czy to chodzi o to ze to są 4 pierwsze bity i to ze po 8 jest cztery to odpowiada przesuniecie bitu w prawo m >>=1?

i jeszcze (a & m) powiedzmy ze mam liczbę a = 16 w ogóle tego nie kumam?

1

bo mam m równe 8 później 4 , 2 i 1 czy to chodzi o to ze to są 4 pierwsze bity i to ze po 8 jest cztery to odpowiada przesuniecie bitu w prawo m >>=1?

Dokładnie - to zwykłe przesunięcia bitowe, w prawo o jeden w każdej iteracji:

00001000    8
00000100    4
00000010    2
00000001    1

Tak to wygląda.

i jeszcze (a & m) powiedzmy ze mam liczbę a = 16 w ogóle tego nie kumam?

Czego nie kumasz? To zwykła koniunkcja:

1 & 1 == 1
0 & 1 == 0
1 & 0 == 0
0 & 0 == 0

Przyda Ci się poczytać jakiś kurs z podstaw dotyczących systemu binarnego i operatorów bitowych.

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