【发布时间】:2014-07-03 08:28:43
【问题描述】:
我正在尝试理解以下代码,该代码可在 MDN 和相关question 的答案中找到。 (仅在 FF 30 中测试。)
function createBinaryString (nMask) {
// nMask must be between -2147483648 and 2147483647
for (var nFlag = 0, nShifted = nMask, sMask = ""; nFlag < 32;
nFlag++, sMask += String(nShifted >>> 31), nShifted <<= 1);
return sMask;
}
var p = createBinaryString(7);
console.log(p); //"00000000000000000000000000000111"
这个在MDN 上,但它是如何工作的 - 如果有任何可以理解的解释,我将不胜感激。
我有二元运算符的基本知识并且知道有一个.toString(2) 方法。但是String(nShifted >>> 31) 部分究竟做了什么?
这里有更好的可读版本,但第一个不起作用。在这里,我也将不胜感激有关我做错了什么的任何建议。我看不出与第二个工作版本有什么不同。
var re = '';
var numb = 7;
var shiftBuf = numb;
for (var i = 0; i < 32; i++); {
re += String(shiftBuf >>> 31);
shiftBuf <<= 1;
}
console.log(re); //"0"
var result = '';
var num = 7;
var shiftBuffer = num;
for (var i = 0; i < 32; i++) {
result += String(shiftBuffer >>> 31);
shiftBuffer <<= 1;
}
console.log(result); //"00000000000000000000000000000111"
【问题讨论】:
-
Rq : 你有一个 ;结束你的第一个 for 循环。
标签: javascript theory number-formatting