Skip to content

Instantly share code, notes, and snippets.

@TuurDutoit
Created November 16, 2016 09:23
Show Gist options
  • Save TuurDutoit/bbe4aa14ea5aeeaf19393db294539f16 to your computer and use it in GitHub Desktop.
Save TuurDutoit/bbe4aa14ea5aeeaf19393db294539f16 to your computer and use it in GitHub Desktop.
A (non-recursive) algorithm to convert a binary number to decimal
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