2010-11-05 75 views
1

是否有位操作或一系列位操作會給我以下結果?位操作問題

我會通過使用示例展示我想要的內容。請注意,每個位串的長度是不相關的:

1)

100000 
100000 
------ 
011111 

2)

000000 
000000 
------ 
000000 

3)

100000 
000000 
------ 
000000 

4)

000100 
000100 
------ 
111011 

5)

100100 
100100 
------ 
011011 

6)

100100 
000100 
------ 
111011 

7)

010101 
101010 
------ 
000000 

8)

111111 
111111 
------ 
000000 

所以,想法是,如果第一串中的任意位置,1與秒中的1重疊ond字符串,那麼在結果中,除了1重疊的位置外,其他位置都會出現。

回答

2

僞代碼:

if (a & b) 
    return ~(a & b) 
else 
    return 0 
-2

您是否需要對整個位列表進行單個操作,或者您可以逐個迭代單個位對?如果是這樣,這是微不足道的,如果沒有,我相信有一個布爾二進制功能,確實(這其中16)

2

你可以使用一個按位nand,這是一個bitwise AND否定除了情況2 ,3和7

如果你絕對必須有這兩種情況下,你可以做

result = a & b;  // Bitwise and of the two inputs 
if (result != 0) {  // If we have no matches, we want it to stay 0. 
    result = ~result; 
} 

如果你這樣做,但是,你必須明白,你沒有告訴案例2/3/7的方式來自案例8.

+1

我不認爲案例7也是NAND。 7看起來像是一個AND,但也會被你的例子所覆蓋。 – 2010-11-05 16:00:55

+0

確實,錯過了那一個。固定。 – 2010-11-05 16:22:04

+0

+1不重複'a&b'表達式。 – Alnitak 2012-01-05 08:08:28

0

IIRC,一個可靠的方法,使從你的數字邏輯被稱爲「卡諾圖」運算結果數據這樣的轉換,即,即您先從數據,所謂的「真值表」,並結束提供必要的數字邏輯。當然,從這一點出發,您可以根據特定於語言的按位運算符/約定轉換爲任何編程語言。

+0

我懷疑卡諾圖在這種情況下會有很大的幫助,因爲用一種編程語言來表示對邏輯門的多位操作是更爲微不足道的。 – Alnitak 2012-01-05 08:10:22