2017-07-27 7 views
3

間のビットを入れ替え私はこのコードを試してみました。C二つの数字

はまた、私はこれを見るとき:

*numbB &= (~bitA^oneShift); 

私は実際にそれを行うための簡単な方法があることと思います。 あなたは私のために何かを持っている場合、私はそれを取るでしょう:)事前に

おかげ

+1

これは実際には「2つの数字を入れ替える」わけではありません。「2つの数字の間にビットを入れ替える」というよりも、それはまだ混乱している説明です。 – harold

+0

ステップ1: 1u << bitPosition'(add 'u') – chux

+0

ありがとう、harold、私はタイトルを変更しました。私は気にしませんでした.... Chux、私は今、感謝を使用します:) –

答えて

5

まず、あなたはすべてを削除し、実際のビットでそれを0に応じた数の位置を設定し、OR必要があります条件:

*numbB &= ~oneShift; // Set the bit to `0` 
*numbB |= bitA;  // Set to the actual bit value 

他の数字は同じです。

+0

Veryいいよ!ありがとうございました –

0

unsigned char mask = 1u << bitPosition; 

マスクを形成し、その後、XOR swap algorithmであなたのピアグループの怒りを獲得することができます。

*numbA ^= *numbB & mask; 
*numbB ^= *numbA & mask; 
*numbA ^= *numbB & mask; 

numbA == numbBに注意してください。

+1

私は代わりにそれを与えたいと思っていましたが、最近の質問の一つであるSOのピアの怒りを思い出しました。☺️ –

+0

@EugeneSh。 IMOでは、これは驚くべきエラーであるため、最終的にこのアプローチを拒否するのはnumbA == numbBの問題です。 – chux

+0

まあ、一時変数を使うことができます。 –