我目前有一個循環,它接受一個整數,併爲其二進制版本的每一位輸出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或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
迭代一個位掩碼而不是移位整數的位。
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);
}
如果你喜歡手工工藝的整個二進制表示的實現,那麼你可以使用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
我不確定長度 - 8在我的前 - 所以我將不得不使用二進制字符串填充函數這個 – cyberwombat
@Yashua您可以自定義此答案,就像你想:) – thefourtheye