JavaScript 从左边设置位
JavaScript set bits from the left
我有一个号码,例如128
。它的位表示是10000000
。
我想将左边的第 3 位设置为 10100000
(160
).
我认为我可以这样做:
var foo = 128;
foo = foo | 1 << 2;
但这给了我 132
或 10000100
。它设置了右起第3个!
如何设置从左边到0或1?
试试这个。 >>
将从右移开始工作
var foo = 128;
foo = foo | foo >> 2;
这有效:
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));
我有一个号码,例如128
。它的位表示是10000000
。
我想将左边的第 3 位设置为 10100000
(160
).
我认为我可以这样做:
var foo = 128;
foo = foo | 1 << 2;
但这给了我 132
或 10000100
。它设置了右起第3个!
如何设置从左边到0或1?
试试这个。 >>
将从右移开始工作
var foo = 128;
foo = foo | foo >> 2;
这有效:
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));