我有一個數字,例如128
。它的比特表示是10000000
。 我想設置從左邊的第三位有10100000
(160
)。從左邊開始的JavaScript設置位
我認爲我可以做到這一點:
var foo = 128;
foo = foo | 1 << 2;
但是這給了我132
或10000100
。它從右側設置第三個! 如何將它從左邊的設置爲0或者設置爲1?
我有一個數字,例如128
。它的比特表示是10000000
。 我想設置從左邊的第三位有10100000
(160
)。從左邊開始的JavaScript設置位
我認爲我可以做到這一點:
var foo = 128;
foo = foo | 1 << 2;
但是這給了我132
或10000100
。它從右側設置第三個! 如何將它從左邊的設置爲0或者設置爲1?
這工作:
var foo = 128;
foo = foo | foo >> 2
但是如果你想將其打開和關閉呢?
var foo = 128;
var mask = foo >> 2;
// Flick the bit on
foo = foo | mask;
// foo now equals 160
// Set the bit back to 0
foo = foo & ~mask;
// foo equals 128 again
function transformBits(bits, order, target) {
var bitStr = bits
.toString(2)
.split('')
.map(function(value, index) {
return index == (order - 1) ? target : value;
})
.join('');
return parseInt(bitStr, 2);
}
document.writeln(transformBits(128, 3, 1));
document.writeln(transformBits(128, 3, 0));
我剛纔輸入到node.js中這'1 >> 2'返回0.'128 | 1 >> 2'返回128. –
它的停留128:https://jsfiddle.net/75k1bxzt/1/安德魯解決方案通過將其設置爲1工作,但我怎麼能設置第三位回到0? – pistacchio
@pistacchio - 我修改了我的答案,將它重新設置爲0 –