2015-09-30 115 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));