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切换它.
对于多位值,操作按位执行,即在操作数的相应位之间执行.
如果您知道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?没有)