2014-01-12 26 views
0

我目前有一个循环,它接受一个整数,并为其二进制版本的每一位输出0或1。通过反向的二进制数位枚举

var m = 10; 
for (var i = 0; i < 8; i++) { 
    bit = m & 1; 
    console.log(bit ? + 1 : 0); 
    m >>= 1; 
} 

这导致0 1 0 1 0 0 0 0

我怎样才能得到它的反向循环? 0 0 0 0 1 0 1 0

回答

0

迭代一个位掩码而不是移位整数的位。

for (var i = 7; i >= 0; i--) { 
    bit = m & (1 << i); 
    console.log(bit ? 1 : 0); 
} 

或:

for (var mask = 1 << 7; mask; mask >>= 1) { 
    bit = m & mask; 
    console.log(bit ? 1 : 0); 
} 
1

如果你喜欢手工工艺的整个二进制表示的实现,那么你可以使用Barmar's answer

不过,好消息是,有一个可靠的,内置功能,Number.prototype.toString,你可以用它来做到这一点,像这样

var bin = (10).toString(2), numberOfBits = 8; 
console.log((new Array(numberOfBits + 1).join("0") + bin).slice(bin.length)); 

输出

00001010 
+0

我不确定长度 - 8在我的前 - 所以我将不得不使用二进制字符串填充函数这个 – cyberwombat

+0

@Yashua您可以自定义此答案,就像你想:) – thefourtheye