JSFiddle - React, Tailwind, and code Playground

by Jon-Carlos Rivera

JavaScript

var a = new Uint16Array(10);
for (var i = 0; i< 10; i++) a[i] = (Math.random() * 6553.6*i)|0;

function zeroFillShiftRight (a, n) {
    var fullShifts = Math.floor(n / 16);
    var bitShifts = n % 16;
    zeroFillShiftRightBits(a, bitShifts);
    zeroFillShiftRightFull(a, fullShifts);
}

function zeroFillShiftRightFull (a, n) {
    var i = a.length;
    while(i--) a[i] = (i - n)>0 ? a[i-n] : 0;
}

function zeroFillShiftRightBits (a, n) {
    var remainingBits = 0;
    var invShift = 16 - n;

    for (var i = 0; i < a.length; i++) {
        var t = a[i];
        a[i] = remainingBits | (a[i] >>> n)
        remainingBits = t << invShift;
    }
}

// Testing..

var b = new Uint16Array(a);
zeroFillShiftRight(b, 50)
var map = Array.prototype.map;
function toBits(v) { return ('0000000000000000' + v.toString(2)).slice(-16); }
console.log(map.call(a, toBits).join(''), map.call(b, toBits).join(''));