Created
November 16, 2016 09:23
-
-
Save TuurDutoit/bbe4aa14ea5aeeaf19393db294539f16 to your computer and use it in GitHub Desktop.
A (non-recursive) algorithm to convert a binary number to decimal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function binaryToDecimal(x) { | |
// Checks: | |
// - x is positief | |
// - x is geen kommagetal | |
if(x < 0 || x !== Math.floor(x)) { | |
return "invalid"; | |
} | |
// Variabelen: | |
// - i: index in het cijfer: | |
// 543210 -> index | |
// 110010 -> binair getal | |
// - res: het resultaat (decimaal) | |
// - c: rest van x bij deling door 10 = de bit waar we per iteratie mee werken | |
var i = 0; | |
var res = 0; | |
var c; | |
// Loop: | |
// - voor elke 'bit' van x (van achter naar voor!) | |
// - `while`, want we weten niet hoeveel 'bits' er zijn | |
// - (`for` word gebruikt wanneer we het aantal iteraties wel op voorhand weten) | |
// - De laatste bit wordt telkens van x verwijderd, tot x gelijk is aan 0 | |
// - Ofwel: blijven uitvoeren zolang er bits overblijven | |
while(x > 0) { | |
// Laatste bit: rest bij deling door 10 | |
c = x % 10; | |
// De bit kan een getal van 0 tem. 9 zijn, | |
// maar alleen 0 en 1 zijn geldig | |
if(c > 1) { | |
return "invalid"; | |
} | |
// Haal de laatste bit weg van x | |
// De volgende iteratie zal de volgende bit verwerken | |
x = (x - c) / 10; | |
// Math.pow() berekent 2^i | |
// Dus: laatste bit = 2^0 = 1; voorlaatste bit = 2^1 = 2; ... | |
// Vermenigvuldigen met de bit (0 of 1) en optellen bij het resultaat | |
res += c * Math.pow(2, i); | |
// Index verhogen | |
i++; | |
} | |
return res; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment