运行代码
function toBin(intNum) { var answer = ""; if(/\d+/.test(intNum)) { while(intNum != 0) { answer = Math.abs(intNum%2)+answer; intNum = parseInt(intNum/2); } if(answer.length == 0) answer = "0"; return answer; } else { return 0; } } alert(toBin(45))运行代码
function toBin(dec) { var bits = []; var dividend = dec; var remainder = 0; while (dividend >= 2) { remainder = dividend % 2; bits.push(remainder); dividend = (dividend - remainder) / 2; } bits.push(dividend); bits.reverse(); return bits.join(""); } alert(toBin(45))运行代码
alert(2..toString(2))//如果一个点会提示错误 ,引擎无法判断是小数点还是"."操作符,也或者说这里产生了一个"shift-shift confilt"
alert(2.0.toString(2))
alert((2).toString(2))
"shift-shift confilt"这个词,从编译原理来的,我当时直接看的E文版,不知道怎么翻译,大致意思是LALR语法分析的时候,需要执行把一个token从输入序列里弹出并压入语法堆栈的动作的时候,这个token有两个或两个以上不同的语义。
对应的,语法分析通常有两个动作,shift和reduce,LR(1)中shift-reduce conflit是可以的,但是shift-shift conflit是不行的。 大致是这样的意思。
0 0 0 1 0 1 0 0
//这个口算可以得出 1是第3位 那么就是 2^(3-1)=4 前面第1个1是第5位 那么就是2^(5-1)=16 结合起来就是 4+16=20