C编程-异或逐位操作

C编程-异或逐位操作,c,bit-manipulation,xor,C,Bit Manipulation,Xor,下面的“C”语句执行什么操作 星=星^0B00100 (A)切换可变星的第2位和第5位 (B)清除除可变星号的第2位和第5位以外的所有位 (C)设置除可变星号的第2位和第5位以外的所有位 (D)将变星中的值乘以0B00100 我对此仍然一无所知。有人能帮我吗?它是(A)切换第2位和第5位 以下是XOR操作的真值表: x y x^y 0 0 0 1 0 1 0 1 1 1 1 0 您可以从表中看到xxor 0=x和XOR 1=!x XOR是一种逐位操作,因此它对单个位

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

星=星^0B00100

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

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

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

(D)将变星中的值乘以0B00100

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

它是(A)切换第2位和第5位

以下是XOR操作的真值表:

x  y  x^y
0  0   0
1  0   1
0  1   1
1  1   0
您可以从表中看到
xxor 0=x
XOR 1=!x

XOR是一种逐位操作,因此它对单个位进行操作。因此,如果使用某个常量进行XOR
star
,它将切换常量中的
1

您可以找到一些解释,例如,XOR运算符(也称为“逻辑加法”)的定义如下:

a   b   a^b
-----------
0   0    0
0   1    1
1   0    1
1   1    0
因此,
a^0
保持
a
不变,而
a^1
将其切换


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

异或
具有以下真值表:

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

我们可以看到,如果
B
true
1
),则
A
被翻转(切换),如果
false
0
A
被单独保留。所以答案是(A)。

如果您知道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) 将变星中的值乘以0B00100。(36x170=142?否)

井异或是一种二进制运算符,可以处理2个比特

xoring规则:对于相同的位ans为0,对于不同的位ans为1 让

a=10101 b=0110 -------------- c=11 0 0 1 -------------- 逐位比较a和b的位 如果相同,则放入0,否则放入1 xor基本上用于在给定的重复编号集合中查找唯一的。
如果两个输入相同,则xor运算符返回0;如果两个输入不同,则xor运算符返回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

暴躁反应:无,因为这不会编译。C不支持二进制数的
0b
前缀作为标准。真的吗?但是这个问题出现在我过去的试卷上,所以我认为它会起作用。
star
的原始值是多少?试试这个:@D3FTY顺便问一下,如果你知道这是XOR运算符,为什么不使用1。已经知道它的功能(这是对做CS之类的人的期望),2。如果你没有,为什么不谷歌一下呢?有什么具体的解释吗?我还是不明白。@H2CO3好吧,如果我是哑巴,我很抱歉。但是你不能期望每个人都像你一样拥有同样的知识水平,聪明的亚历克斯。无意冒犯,那答案怎么会是C? a= 1 0 1 0 1 1 b= 0 1 1 0 1 0 -------------- c= 1 1 0 0 0 1 --------------