Uczymy się zamieniać dodatnie liczby dziesiętne na unsigned binary integer. Do dzieła!

Na początku taki schemat:

  • Bierz resztę z dzielenia przez 2 i przypisz na pozycję
  • Podziel bez reszty liczbę przez 2
  • To co zostało – reszta z dzielenia przez 2 przypisz na następną pozycję
  • Powtarzaj aż liczba nie stanie się zerem

Mała prezentacja:

let number = 2;

console.log(number % 2); //0
number = Math.floor(number / 2) // number = 1
console.log(number % 2); //1
//10 in binary -> 2 in decimal 

Tak to działa. Okej, piszemy funkcję:

function decimalToBin_v1(num){

    let binaryArr = [];

    while(num > 0){

        binaryArr.unshift(num % 2);
        num = Math.floor(num / 2);

    }

    return "0b" + binaryArr.join("");
}

Dokładnie to robimy. Reszta z dzielenia przez 2 przypisana na pozycję (pozycje liczymy od prawej). Liczba podzielona bez reszty przez 2. Reszta z dzielenia przez liczbę przypisana na kolejną pozycję (na lewo od poprzedniej). Zapętl aż liczba wyniesie 0 (dzieląc bez reszty przez cokolwiek koniec końców zero dostaniesz).

To jest panent na konwersje z wyższego pozycyjnie systemu na niższy. Okej, teraz rekurencja:

function decimalToBinRec(num){

    let binaryArr = [];

    function _decToBinRec(num){
        if(num <= 0)
            return;

        binaryArr.unshift(num % 2);
        _decToBinRec(Math.floor(num / 2));
    }
    
    _decToBinRec(num);

    return "0b" + binaryArr.join("");
}

Moim zdaniem teraz jest czytelniej, ale mogę się mylić. Tak czy inaczej to nie jest odpowiednia reprezentacja. Nie jest to int32 ani int16, ponadto funkcja obsługuje tylko dodatnie liczby, ale wszystko powoli, upewnijmy się, że rozumiemy to, co już mamy.