0

I have a code that changes two sets of hex numbers and then stores them into a new unsigned char. The code looks like the following:

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

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

So what I know is:

0x1D = 0001 1101

0xF0 = 1111 0000

Im confused on what the changedSw line is doing. I know it will give the output 0x02 but I can not figure out how its doing it.

4

2 回答 2

0

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

它的意思是“零一部分OldSw和相反的另一部分”。NewSw指示哪些位OldSw为零以及哪些位要反转。即,1NewSw表示要清零的位,0 表示要反转的位。

该操作分两步实现。

步骤 1. 反转位。

(OldSw ^ ~NewSw)

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

看,我们反转了 original 中为 0 的位NewSw

步骤 2. 在上一步中未反转的零位。

& ~OldSw

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

看,它不会改变反转位,但其余的都为零。

于 2013-10-09T07:08:08.870 回答
-1

第一部分是 1F 即。0001 1111.所以当以 ~oldsw(1110 0010) 结束时,操作将是这样的:

0001 1111
1110 0010
----------
0000 0010

所以输出将是 2。波浪号运算符是 1 的补码。

于 2013-10-09T06:50:36.123 回答