wyjaśnienie działania funkcji

0

Witam,
może ktoś wytłumaczyć mi działanie fukcji :

private string ByteToBitString(byte value)
        {
            string s = "";
            for (int i = 0; i < 8; i++)
            {
                s += (value & 0x80) > 0 ? "1" : "0";
                value <<= 1;
            }
            return s;
        }
0

Hmm...

string s = "";
for (int i = 0; i < 8; i++)
{
    s += (value & 0x80) > 0 ? "1" : "0";
    value <<= 1;
}
return s;

No więc tak:

string s = "";

Do stringa s zapisujemy wynik działania funkcji, czyli napis reprezentujący tą liczbę w systemie dwójkowym.

for (int i = 0; i < 8; i++)

Bajt ma 8 bitów, nie?

s += (value & 0x80) > 0 ? "1" : "0";

Magia.

(value & 0x80) bierze najbardziej znaczący bit liczby, czyli jeśli masz liczbę 154 == 0b10011010 to zwróci 1. (dlaczego - & to bitowe and, czyli się wykonuje coś takiego:

  10000000 (0x80)
& 10011010 (154)
= 100000000

) - jeśli nie wiesz dlaczego, http://en.wikipedia.org/wiki/Bitwise_operation

value <<= 1;

value = value * 2, czyli przesunięcie bitowe w lewo

Jeśli mamy tą nieszczęsną 154 == 10011010, to 154 << 1 daje coś takiego:

 10011010 << 1
100110100

(przesuwa bity w lewo i dopisuje zero na końcu).

No i jeśli połączysz to wszystko, wychodzi na to że ta funkcja bierze po kolei bity od lewej i dopisuje do stringa.

Nieszczególnie to szczęśliwie napisane - po pierwsze, tworzy 8 niepotrzebnych napisów w pamięci (string jest immutable).

0

ok czaje ;] dzięki bardzo

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