下面的“C”语句执行什么操作?
星=星^ 0b00100100;
(A)切换变星的第 2 位和第 5 位。
(B)清除除变星的第 2 位和第 5 位之外的所有位。
(C)设置除变量星的位 2 和 5 之外的所有位。
(D)将变星中的值与 0b00100100 相乘。
我对此仍然一无所知。有人可以帮我吗?
下面的“C”语句执行什么操作?
星=星^ 0b00100100;
(A)切换变星的第 2 位和第 5 位。
(B)清除除变星的第 2 位和第 5 位之外的所有位。
(C)设置除变量星的位 2 和 5 之外的所有位。
(D)将变星中的值与 0b00100100 相乘。
我对此仍然一无所知。有人可以帮我吗?
XOR 运算符(也称为“逻辑加法”)定义如下:
a b a^b
-----------
0 0 0
0 1 1
1 0 1
1 1 0
所以在切换它时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
然后再次检查你的答案,做到了:
(A) 切换变星的第 2 位和第 5 位。(是的)
(B) 清除除变星的第 2 位和第 5 位之外的所有位。(没有)
(C) 设置除变量星的位 2 和 5 之外的所有位。(没有)
(D) 将变星中的值与 0b00100100 相乘。(36x170 = 142?不)
它是 (A) 切换位 2 和 5。
以下是异或运算的真值表:
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
常数中的位。
你可以在这里找到一些解释。
有这个exclusive OR
真值表:
A B A^B
-----------
1 1 0
1 0 1
0 1 1
0 0 0
我们可以看到 if B
is true
( 1
) thenA
被翻转(切换), if it's false
( 0
)A
被单独留下。所以答案是(A)。
如果两个输入相同,则 XOR 运算符返回 0,否则如果两个输入不同,则返回 1。例如给定真值表:-
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基本上用于在给定的重复编号集中找到唯一的。只是异或所有没有。你会得到唯一的(如果只有一个唯一的)