"Trong Java, các toán tử bitwise làm việc với các số nguyên. JavaScript không có số nguyên. Nó chỉ có các số dấu phẩy động chính xác gấp đôi. Do đó, toán tử bit chuyển đổi toán hạng số thành số nguyên, thực hiện công việc kinh doanh của họ chuyển đổi chúng trở lại. Trong hầu hết các ngôn ngữ, các toán tử này rất gần với phần cứng và rất nhanh. Trong JavaScript, chúng rất xa phần cứng và rất chậm. JavaScript hiếm khi được sử dụng để thực hiện thao tác bit. " - Douglas Crockford, Javascript: The Good Parts
Vấn đề là bạn không thực sự có bất kỳ lý do gì để sử dụng toán tử bitwise. Chỉ cần nhân hoặc chia cho 2^numbits.
Mã của bạn nên là:
for(var j = 0; j < 64; j++) {
mask = mask * 2;
console.log(mask);
}
Hoặc nói chung:
function lshift(num, bits) {
return num * Math.pow(2,bits);
}
Bạn nhận được các ý tưởng.
jsPerf nói không. http://jsperf.com/multiply-vs-divide/9 – Shinjikun