C编程 - XOR按位运算

时间:2013-06-05 13:32:10

标签: c bit-manipulation xor

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

  

star = star ^ 0b00100100;

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

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

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

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

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

6 个答案:

答案 0 :(得分:18)

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

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

所以a^0保持a完整,a^1切换它。

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

答案 1 :(得分:8)

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

从“测试期间”的角度来看,假设你需要向自己证明这一点,你真的不需要知道star的初始值来回答这个问题,如果你知道如何{{ 1}}然后工作就扔掉那里:

^

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

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

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

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

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

答案 2 :(得分:4)

是(A)切换位2和5

以下是XOR操作的真值表:

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位。

您可以找到一些解释,例如here

答案 3 :(得分:3)

exclusive OR有这个真值表:

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

我们可以看到,如果Btrue1),那么A会被翻转(切换),如果是false({{1} } {} 0是独立的。所以答案是(A)。

答案 4 :(得分:1)

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

  • a = 1 b = 1 =>一个^ B = 0,
  • a = 0 b = 0 => a ^ b = 0,
  • a = 0 b = 1 =>一个^ B = 1,
  • a = 1 b = 0 =>一个^ B = 1。

答案 5 :(得分:0)

well 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的位 如果相同,则把0放在1 xor基本上用于在给定的重复集合中找到唯一的。 只是xor所有的。你会得到一个独特的(如果只有一个唯一的)