我有一个数字,例如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 –