以下'C'语句执行什么操作?
star = star ^ 0b00100100;
(A)切换变星的第2位和第5位。
(B)清除变量星的第2位和第5位以外的所有位。
(C)设置变星的第2位和第5位以外的所有位。
(D)将变量星中的值与0b00100100相乘。
我仍然对此毫无头绪。有人可以帮助我吗?
答案 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 = x
和x 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
我们可以看到,如果B
为true
(1
),那么A
会被翻转(切换),如果是false
({{1} } {} 0
是独立的。所以答案是(A)。
答案 4 :(得分:1)
如果两个输入都相同,则XOR运算符返回0,否则如果两个输入都不同则返回1.例如,给定真值表: -
答案 5 :(得分:0)
well xor是二进制运算符,可以处理2个字位。
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所有的。你会得到一个独特的(如果只有一个唯一的)