2010-02-12 59 views
1

我有一个关于掩蔽比特的快速问题。如果我想打开两个8位流上,做我关于掩蔽比特的说明

使用对两个AND逻辑:

 10101010 
AND 01101001 
    ________ 
    00101000 

还是我实际更改流中的位中的一个打开的位上?我想我的问题是当我打开(使用AND)或关闭(使用OR)时,我是否实际更改任何位,或仅使用AND/OR逻辑比较两个位?

+1

你是什么意思“打开”?您使用该术语的方式显示出严重的误解或非标准用法。 – 2010-02-12 00:05:20

+0

我想我只需要一点点流(比如说10101010)并通过添加一个01010101并将这两个放入AND和OR逻辑来更改第4位? – HollerTrain 2010-02-12 00:08:48

+0

我认为'00001000'打开第4位,'11110111'关闭第4位? – HollerTrain 2010-02-12 00:13:54

回答

0

其他人,纠正我,如果我错了:

要打开在一个8位的第4位流,你会使用使用00001000OR逻辑比较8位流。

要关闭8位数据流中的第4位数据,您可以使用11110111使用AND逻辑来比较8位数据流。

要使用逻辑XOR来切换使用11111111的位。

+0

'XOR'会切换“流”中的每一位。 – Sapph 2010-02-12 00:25:15

+0

@Sapph,是的。所以如果我想打开一个特定的位,我会使用'00000001'(把这个放在我们正在比较的这个蒸汽的第一个位)放到AND逻辑场景中,但是我也可以使用这个方法来比较两个比特流(不试图打开/关闭一个单一的位)? – HollerTrain 2010-02-12 00:28:00

+0

不,异或逻辑不会有预期的“切换”结果。 – 2011-05-16 18:41:54

0

我不确定你在这种情况下'流'的含义。

在大多数语言中,你将不得不有一个任务以及二进制操作。

这是你通常会碰到这样的

foo = get_byte() // Call some function to get the original value of foo 
foo = foo AND 11110111 // Replace foo with the result of the AND, which 
         // in this case will turn off the 4th bit, and leave 
         // the other bits unchanged 

最后一行替换foo的内容与二进制操作

1

的结果打开(1),你可以使用OR运营商,在要开启位置1,因为无论流中的原始值,其结果会是什么ON

00000000 // whatever the values in the input 
OR 00000001 // 'OR' turns on the last position in the stream 
    --------- 
    00000001 

关掉(0),您可以在想要关闭的位置使用AND运算符,因为无论输入流中的原始值如何,结果都将为OFF。

11111111 // whatever the values here 
AND 11111110 // turns off the last position in the stream 
    --------- 
    11111110