C编程-异或逐位操作
下面的“C”语句执行什么操作 星=星^0B00100 (A)切换可变星的第2位和第5位 (B)清除除可变星号的第2位和第5位以外的所有位 (C)设置除可变星号的第2位和第5位以外的所有位 (D)将变星中的值乘以0B00100 我对此仍然一无所知。有人能帮我吗?它是(A)切换第2位和第5位 以下是XOR操作的真值表: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是一种逐位操作,因此它对单个位
x y x^y
0 0 0
1 0 1
0 1 1
1 1 0
您可以从表中看到xxor 0=x
和XOR 1=!x
XOR是一种逐位操作,因此它对单个位进行操作。因此,如果使用某个常量进行XORstar
,它将切换常量中的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
--------------