2009-09-17 5 views
37

JavaScriptでビットを設定、消去、切り替え、チェックする方法は?JavaScriptで1ビットをどのように設定、クリア、トグルしますか?

var mask = 1 << 5; // gets the 6th bit 

ビットが設定されているかどうかをテストするには:

n |= mask; 

ビットをクリアするには:

if ((n & mask) != 0) { 
    // bit is set 
} else { 
    // bit is not set 
} 

は、ビットを設定するには

+0

++異なる言語です。両方から彼らと異なる答えを得るのに非常に役立ちます。 – cmac

答えて

124

は、ビットマスクを取得するには
n &= ~mask; 
ビットを切り替えるには

n ^= mask; 

Javascript bitwise operatorsを参照してください。

19

は私が@cletus情報の助けを借りたBitSetクラスを建て

function bit_test(num, bit){ 
    return ((num>>bit) % 2 != 0) 
} 

function bit_set(num, bit){ 
    return num | 1<<bit; 
} 

function bit_clear(num, bit){ 
    return num & ~(1<<bit); 
} 

function bit_toggle(num, bit){ 
    return bit_test(num, bit) ? bit_clear(num, bit) : bit_set(num, bit); 
} 
+1

これは大変感謝しています。なぜbit_testが動作するのか説明できますか?私は興味深いビットを右端の位置に移動するための正しいシフトを理解していますが、中間値が何であるか、残りの2を2で割ったときの剰余が設定されたときに0でない理由を理解しようとすると、 – Raoul

+1

欲しいビットを一番右の位置に置いたら、新しい値が害であるかどうかをテストするだけです(new_value%2!= 0)。減損数は、bit0 = 1またはbit0 = 0(bit0の重みは2のべき乗で、1は0になるため) – UnLoCo

0

(@cletusのおかげで)いくつかのものを追加したい:JavaScriptとC/C @user

function BitSet() { 
    this.n = 0; 
} 

BitSet.prototype.set = function(p) { 
    this.n |= (1 << p); 
} 

BitSet.prototype.test = function(p) { 
    return (this.n & (1 << p)) !== 0; 
} 

BitSet.prototype.clear = function(p) { 
    this.n &= ~(1 << p); 
} 

BitSet.prototype.toggle = function(p) { 
    this.n ^= (1 << p); 
} 
関連する問題