Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Prośba o wyjaśnienie kodu przeliczającego liczby


Rekomendowane odpowiedzi

Opublikowano

Znalazlem taki kod, ktory ma przeliczac liczby Dec na Bin. Wyjaśni mi ktoś jak on działa? 

string DecToBin2(int number)
{
    string result = "";

    do
    {
        if ( (number & 1) == 0 )
            result += "0";
        else
            result += "1";

        number >>= 1;
    } while ( number );

    reverse(result.begin(), result.end());
    return result;
}

Chodzi mi głownie o zapis (number & 1) == 0

Demokracja to ustrój, w którym możesz mówić, to co myślisz, nawet wtedy, kiedy nie myślisz.

                                                                              - Edward Rutherford

 

Opublikowano

­

if ( (number & 1) == 0 )
& w C++ to logiczne AND

innymi słowy, zwraca 1 jeśli wszystkie porównywane wartości wynoszą jeden, w tym wypadku porównuje to pierwszy bit liczby od prawej. W pamięci liczba jest zapisana binarnie, więc taka operacja jest jak najbardziej prawidłowa.

Następnie zapisywany jest do stringa wynik i

number >>= 1;
przesuwa binarnie liczbę o 1 w prawo (>> to operator przesuniecia binarnego w prawo, jak można się domyślić)

w pamięci wygląda to tak (dla np. liczby 25)

 

  11001
&     1
--------
      1 -> leci do string
11001 >> 1 = 1100 (przesunięcie w prawo, najmłodszy bit znika)

 

  1100
&    1
-------
     0 -> do stringa
itd.

 

na końcu reverse, ponieważ bity w stringu będą zapisane odwrotnie jak w rzeczywistości.

 

A jak się nie chcesz męczyć to masz funkcję itoa()

846331404756772371599.jpeg
Opublikowano

Wow. Dzięki wielkie :). Myślę, że ta wiedza mi się kiedyś przyda. Pozdrawiam :)

Demokracja to ustrój, w którym możesz mówić, to co myślisz, nawet wtedy, kiedy nie myślisz.

                                                                              - Edward Rutherford

 

Opublikowano

­

if ( (number & 1) == 0 )

& w C++ to logiczne AND

innymi słowy, zwraca 1 jeśli wszystkie porównywane wartości wynoszą jeden, w tym wypadku porównuje to pierwszy bit liczby od prawej. W pamięci liczba jest zapisana binarnie, więc taka operacja jest jak najbardziej prawidłowa.

Nie! & to jest koniunkcja bitowa, && to jest logiczne AND.

TuByłaSygnatura.png

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...