JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<form class="form-inline">
<div class="form-group">
<label for="from">From</label>
<input type="text" class="form-control" id="from" placeholder="15000">
</div>
<div class="form-group">
<label for="to">To</label>
<input type="text" class="form-control" id="to" placeholder="20000">
</div>
<div class="form-group">
<label for="width">Width (bits)</label>
<input type="text" class="form-control" id="width" value="16">
</div>
<button type="submit" class="btn btn-default">Calculate</button>
</form>
<div class="panel panel-default">
<div class="panel-body" id="panel">
</div>
</div>
<div class="panel panel-default">
<div class="panel-body" id="panel2">
</div>
</div>
JavaScript
function print(t) {
p = $('#panel');
p.html(p.html() + t + "<br>");
}
function print2(t) {
p = $('#panel2');
p.html(p.html() + t + "<br>");
}
function find_lsm(p) {
m = 1;
i = 1;
while (true) {
if ((p & m) > 0) {
return [m,i];
}
m = m << 1;
i += 1;
}
}
$("form").submit(function(event) {
event.preventDefault();
fp = parseInt($('#from').val());
tp = parseInt($('#to').val());
l = Math.pow(2, $('#width').val()) - 1;
if (!fp || !tp || fp >= tp) {
alert("Come on place some values that make sense....")
} else {
cp = fp;
while (true) {
cm = find_lsm(cp);
s = cm[1];
cm = cm[0];
if (cm >= tp) {
return;
}
e = cp | (cm - 1);
print("Range " + cp + " - " + e + " mask " + (l & (l << (s-1))).toString(16));
cp += cm;
}
}
});