0

16 進数の 2 つのセットを変更し、それらを新しい unsigned char に格納するコードがあります。コードは次のようになります。

unsigned char OldSw = 0x1D;
unsigned char NewSw = 0xF0;
unsgined char ChangedSw;

ChangedSw = (OldSw ^ ~NewSw) & ~OldSw;

だから私が知っているのは:

0x1D = 0001 1101

0xF0 = 1111 0000

changedSw 行が何をしているのか混乱しています。出力 0x02 が得られることはわかっていますが、その方法がわかりません。

4

2 に答える 2

0

ChangedSw = (OldSw ^ ~NewSw) & ~OldSw;

「一方の部分をゼロにしてOldSw、他方の部分を反転する」という意味です。のどのビットをゼロにし、どのビットを逆にするかをNewSw示します。OldSwつまり、1NewSwはビットをゼロにすることを示し、0 はビットを反転することを示します。

この操作は 2 つのステップで実装されます。

ステップ 1. ビットを反転します。

(OldSw ^ ~NewSw):

  0001 1101
^ 0000 1111
  ---------
  0001 0010

ほら、元の 0 だったビットを反転しましたNewSw

ステップ 2. 前のステップで反転されなかったビットをゼロにします。

& ~OldSw:

  0001 0010
& 1110 0010
  ---------
  0000 0010

ほら、反転ビットは変更されませんが、残りはすべてゼロになります。

于 2013-10-09T07:08:08.870 に答える