Uczymy się pisać funkcję konwertującą liczby binarne (tylko dodatnie) do liczb dziesiętnych. Zaczynajmy!

Na początku odrobina teorii:

  • Wartość cyfry w liczbie to wartość cyfry razy jej waga
  • Waga cyfry w liczbie to baza systemu liczbowego do potęgi jej pozycji

Ok, zobaczmy tę konwersję:

0001

1 na pozycji zerowej
baza 2 (dwójkowy)
wartość tej cyfry = 1 * waga (baza^pozycja czyli 2^0 czyli 1)

generalnie -1

w zasadzie:

0 * 2^3
+
0 * 2^2
+
0 * 2^1
+
1 * 2^0

Ok, inna konwersja:

0101 (5 w dziesiętnym)

cyfry -  0 1 0 1

pozycje  3 2 1 0

baza - 2

waga - baza^pozycja

wartość:

1 * 2^0 (1)
+
0 * 2^1 (0)
+
1 * 2^2 (4)
+
0 * 2^3 (0)

1 + 0 + 4 + 0 = 5

No to piszemy naszą funkcję. Liczby binarne przyjmujemy w postaci tablicy, tak będzie łatwiej:

function binaryToDecimal(binArr){

    let base = 2;
    let position = 0;

    let weight;

    let decimalNumber = 0;

    while(binArr.length > 0){
        
        let lastDigit = binArr.pop();

        weight = Math.pow(base, position);

        decimalNumber += lastDigit * weight;

        position++;
        
    }

    return decimalNumber;
}

Testujemy:

console.log(binaryToDecimal([0,0,0,1]));
//1

console.log(binaryToDecimal([0,0,1,0]));
//2

console.log(binaryToDecimal([0,0,1,1]));
//3

console.log(binaryToDecimal([0,1,0,0]));
//4

console.log(binaryToDecimal([0,1,0,1]));
//5

console.log(binaryToDecimal([0,1,1,0]));
//6

console.log(binaryToDecimal([0,1,1,1]));
//7

console.log(binaryToDecimal([1,0,0,0]));
//8

I uwaga, to wszystko jest do liczb unsigned, czyli tylko pozytywnych. Liczby ujemne w systemie binarnym to osobny temat, są 3 różne notacje, z których dwie mają problem istnienia liczb 0 i -1, zatem niezbyt się do czegokolwiek nadają.

Oczywiście tematem liczb signed (czyli posiadających znak, możliwie ujemnych lub dodatnich) też się zajmiemy.