2010-02-12 86 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