C编程 - XOR按位运算

D3F*_*FTY 0 c bit-manipulation xor

以下'C'语句执行什么操作?

star = star ^ 0b00100100;

(A)切换变星的第2位和第5位.

(B)清除变量星的第2位和第5位以外的所有位.

(C)设置变量星的第2位和第5位以外的所有位.

(D)将变量星中的值与0b00100100相乘.

我仍然对此毫无头绪.有人可以帮我吗?

iva*_*eev 18

XOR运算符(也称为"逻辑加法")定义如下:

a   b   a^b
-----------
0   0    0
0   1    1
1   0    1
1   1    0
Run Code Online (Sandbox Code Playgroud)

所以,a^0离开a不变,同时a^1切换它.

对于多位值,操作按位执行,即在操作数的相应位之间执行.


Mik*_*ike 8

如果您知道XOR如何工作,并且您知道^C中的XOR,那么这应该非常简单.您应该知道XOR将翻转位,其中1被设置,0b00100100的位2和5被设置,因此它将翻转这些位.

从"测试期间"的角度来看,假设你需要向自己证明这一点,你真的不需要知道star回答这个问题的初始价值,如果你知道如何^运作那么只需扔掉任何东西:

 00100100
^10101010  (star's made up value)
---------
 10001110  (star's new value)

 bit position: | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0  
               |---|---|---|---|---|---|---|---
 star's new v: | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0
               |---|---|---|---|---|---|---|---
 star's old v: | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0
Run Code Online (Sandbox Code Playgroud)

然后再次检查你的答案,做到了:

(A)切换变星的第2位和第5位.(是)

(B)清除变量星的第2位和第5位以外的所有位.(不)

(C)设置变量星的第2位和第5位以外的所有位.(不)

(D)将变量星中的值与0b00100100相乘.(36x170 = 142?没有)