20

私は integer を持っていて、バイナリ表現で (最下位から) 番目のビットnを反転させたいと考えています。kどうすればいいですか?

たとえば、 と がある場合n=0b01101k=2結果は次のようになります。0b01001=9

どの言語でも構いません。ありがとうございました。

4

5 に答える 5

31

1 つ以上のビットを反転するには、バイナリ XORを使用します。あなたの場合、適切な XOR マスクはビットを左に1 シフトします。 k

Python の場合:

In [58]: 0b01101 ^ (1 << 2)
Out[58]: 9

表現:

n ^ (1 << k)

C、Java、Python、およびその他のいくつかの言語で有効です (変数が適切に定義されている場合)。

于 2013-08-15T06:01:25.087 に答える
3

cでは、これを行うだけで切り替えられます:

n ^= 1 << k;

しかし、次のような他の方法があります。

n |= ( 1 << k);

これにより、ビット k が 1 にシフトされます。

ビットを反転させたい場合は、単項を使用して if ステートメントを実行し、どのように反転する必要があるかを確認できます。

number = pow(2,k)    
if((number & n) != number)
    //this means that it's a 0 at position k
    n |= ( 1 << k);
else
    //this means that it's a 1 at position k
    n &= ( 0 << k);
于 2013-08-15T06:35:40.927 に答える
2

Cでそれを行う方法は次のとおりです。

n ^ (1 << k)
于 2013-08-15T06:03:00.943 に答える