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.