关于掩蔽比特的澄清

时间:2010-02-12 00:02:32

标签: binary bitmask

我有一个关于屏蔽位的快速问题。如果我想打开两个8位流,我是否

对这两个使用AND逻辑:

     10101010
AND  01101001
     ________
     00101000

还是我实际上改变了流中的一个位来打开这些位?我想我的问题是当我打开(使用AND)或关闭(使用OR)时,我是否实际更改了任何位,或者只是使用{{1}来比较两者逻辑?

3 个答案:

答案 0 :(得分:1)

要打开(1),您将在要打开的位置使用OR运算符,因为无论流中的原始值是什么,结果都将为ON

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

要关闭(0),您将使用AND运算符,在要关闭的位置使用0,因为无论输入流中的原始值是什么,结果都将为OFF。

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

答案 1 :(得分:0)

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

要打开8位流中的第4位,您可以使用OR逻辑使用00001000来比较8位流。

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

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

答案 2 :(得分: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的内容