0

下面的“C”语句执行什么操作?

星=星^ 0b00100100;

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

(B)清除除变星的第 2 位和第 5 位之外的所有位。

(C)设置除变量星的位 2 和 5 之外的所有位。

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

我对此仍然一无所知。有人可以帮我吗?

4

6 回答 6

18

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

a   b   a^b
-----------
0   0    0
0   1    1
1   0    1
1   1    0

所以在切换它时a^0保持a原样。a^1

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

于 2013-06-05T13:36:45.633 回答
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

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

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

(B) 清除除变星的第 2 位和第 5 位之外的所有位。(没有)

(C) 设置除变量星的位 2 和 5 之外的所有位。(没有)

(D) 将变星中的值与 0b00100100 相乘。(36x170 = 142?不)

于 2013-06-05T14:00:48.907 回答
4

它是 (A) 切换位 2 和 5

以下是异或运算的真值表:

x  y  x^y
0  0   0
1  0   1
0  1   1
1  1   0

从表中可以看出x XOR 0 = xx XOR 1 = !x

XOR 是按位运算,因此它对单个位进行运算。因此,如果您star对某个常数进行异或运算,它将切换1常数中的位。

你可以在这里找到一些解释。

于 2013-06-05T13:34:42.623 回答
3

有这个exclusive OR真值表:

A   B   A^B
-----------
1   1   0
1   0   1
0   1   1
0   0   0

我们可以看到 if Bis true( 1) thenA被翻转(切换), if it's false( 0)A被单独留下。所以答案是(A)。

于 2013-06-05T13:40:20.620 回答
1

如果两个输入相同,则 XOR 运算符返回 0,否则如果两个输入不同,则返回 1。例如给定真值表:-

  • a=1 b=1 => a^b=0,
  • a=0 b=0 => a^b=0,
  • a=0 b=1 => a^b=1,
  • a=1 b=0 => a^b=1。
于 2015-01-23T17:46:16.120 回答
0

xor 是二元运算符,适用于 2 位。

xoring 规则:相同位 ans 为 0,不同位 ans 为 1

a= 1 0 1 0 1 1
b= 0 1 1 0 1 0
--------------
c= 1 1 0 0 0 1
--------------

如果相同,则逐位比较a和b的位,否则放1 xor基本上用于在给定的重复编号集中找到唯一的。只是异或所有没有。你会得到唯一的(如果只有一个唯一的)

于 2014-07-22T04:22:01.307 回答