我有一个关于屏蔽位的快速问题。如果我想打开两个8位流,我是否
对这两个使用AND
逻辑:
10101010
AND 01101001
________
00101000
还是我实际上改变了流中的一个位来打开这些位?我想我的问题是当我打开(使用AND
)或关闭(使用OR
)时,我是否实际更改了任何位,或者只是使用{{1}来比较两者逻辑?
答案 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的内容