2015-09-30 81 views
2

我有一个数字,例如128。它的比特表示是10000000。 我想设置从左边的第三位有10100000160)。从左边开始的JavaScript设置位

我认为我可以做到这一点:

var foo = 128; 
foo = foo | 1 << 2; 

但是这给了我13210000100。它从右侧设置第三个! 如何将它从左边的设置为0或者设置为1

回答

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 
2

试试这个。 >>将执行从右侧转移工作

var foo = 128; 
foo = foo | foo >> 2; 

Refrence for Bitwise operators

+0

我刚才输入到node.js中这'1 >> 2'返回0.'128 | 1 >> 2'返回128. –

+0

它的停留128:https://jsfiddle.net/75k1bxzt/1/安德鲁解决方案通过将其设置为1工作,但我怎么能设置第三位回到0? – pistacchio

+0

@pistacchio - 我修改了我的答案,将它重新设置为0 –

1

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));