Binary 关于掩蔽位的澄清

Binary 关于掩蔽位的澄清,binary,bitmask,Binary,Bitmask,我有一个关于屏蔽位的快速问题。如果我想打开两个8位流,我需要吗 针对以下两种情况使用和逻辑: 10101010 AND 01101001 ________ 00101000 或者我真的要改变流中的一个位来打开这些位吗?我想我的问题是,当我打开(使用和)或关闭(使用或)时,我是否确实更改了任何位,或者只是使用和/或逻辑比较这两个位?其他,如果我错了,请纠正我: 要打开8位流中的第4位,您可以使用或00001000逻辑比较8位流 要关闭8位流中的第4位,您需要使用和

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

针对以下两种情况使用
逻辑:

     10101010
AND  01101001
     ________
     00101000

或者我真的要改变流中的一个位来打开这些位吗?我想我的问题是,当我打开(使用<代码>和<代码>)或关闭(使用<代码>或<代码>)时,我是否确实更改了任何位,或者只是使用<代码>和/或<代码>逻辑比较这两个位?

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

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

要关闭8位流中的第4位,您需要使用
11110111
对8位流进行比较


要使用异或逻辑切换位,请使用
11111111

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

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

要关闭8位流中的第4位,您需要使用
11110111
对8位流进行比较


要切换位,可以使用
11111111
使用
XOR
逻辑。

我不确定在这种情况下“流”是什么意思

在大多数语言中,除了二进制操作外,还必须有赋值

也就是说,你通常会有

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的内容替换为二进制操作的结果

我不确定在这种情况下“streams”是什么意思

在大多数语言中,除了二进制操作外,还必须有赋值

也就是说,你通常会有

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),可以在要启用的位置使用OR运算符和1,因为无论流中的原始值是什么,结果都将启用

   00000000 // whatever the values in the input
OR 00000001 // 'OR' turns on the last position in the stream
   --------- 
   00000001
要关闭(0),您可以在要关闭的位置使用AND运算符和0,因为无论输入流中的原始值是多少,结果都是关闭的

    11111111 // whatever the values here
AND 11111110 // turns off the last position in the stream
    ---------
    11111110
要启用(1),可以在要启用的位置使用OR运算符和1,因为无论流中的原始值是什么,结果都将启用

   00000000 // whatever the values in the input
OR 00000001 // 'OR' turns on the last position in the stream
   --------- 
   00000001
要关闭(0),您可以在要关闭的位置使用AND运算符和0,因为无论输入流中的原始值是多少,结果都是关闭的

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

“打开”是什么意思?你使用这个词的方式显示了一个深刻的误解,或者是一个不标准的用法。我想我只需要一点流(比如10101010)通过添加一个01010101并将这两个放在and或or逻辑中来更改第4位?我认为“000011000”打开第4位,“11110111”关闭第4位?与00001100的ANDing关闭除第4位以外的所有位。如果第4位为0,则保持为0,如果为1,则保持为1。如果您觉得混淆,请将和的真值表应用于各个位。您所说的“打开”是什么意思?你使用这个词的方式显示了一个深刻的误解,或者是一个不标准的用法。我想我只需要一点流(比如10101010)通过添加一个01010101并将这两个放在and或or逻辑中来更改第4位?我认为“000011000”打开第4位,“11110111”关闭第4位?与00001100的ANDing关闭除第4位以外的所有位。如果第4位为0,则保持为0,如果为1,则保持为1。如果您觉得混淆,请将和的真值表应用于各个位。该
XOR
将切换“流”中的每个位。@Sapph,是的,正确。因此,如果我想打开一个特定的位,我将使用
00000001
(将我们与这个steam进行比较的第一个位放入
逻辑场景中,但我也可以在比较两个位流时使用此方法(不尝试打开/关闭一个位)?否,异或逻辑将不会产生预期的“切换”结果。
XOR
将切换“流”中的每一位。@Sapph,是的,正确。因此,如果我想打开一个特定的位,我将使用
00000001
(将我们与这个steam进行比较的第一个位放入
逻辑场景中,但我也可以在比较两个位流时使用此方法(不尝试打开/关闭一个位)?否,异或逻辑不会产生预期的“切换”结果。