2009-02-09 10 views
11

ठीक है मैं बिट्स 0,111,010 और 0101011. मैं इतना है कि जिसके परिणामस्वरूप सेल 0010001.एक्सेल XOR कई बिट्स

होगा मुझे पता है तुम बूलियन मूल्यों के लिए इसका उपयोग कर सकते दोनों एक साथ XOR करना चाहते हैं की एक तार के साथ दो कोशिकाओं है

=OR(AND(A1,NOT(A2)),AND(A2,NOT(A1))) 

लेकिन यह बिट्स की एक स्ट्रिंग के लिए काम नहीं करता है।

उत्तर

23

आप उपयोग करने की आवश्यकता ऐसा करने के लिए वीबीए। आप VBA खोलते हैं, तो एक नया मॉड्यूल बना सकते हैं और समारोह

Public Function BITXOR(x As Long, y As Long) 
    BITXOR = x Xor y 
End Function 

तो आप DEC2BIN और BIN2DEC उपयोग कर सकते हैं द्विआधारी से कन्वर्ट करने के लिए इस समारोह को चलाने के लिए दशमलव में दर्ज करें। उदाहरण के लिए:

सेल A1 = 0111010

सेल A2 = 0101011

=DEC2BIN(BITXOR(BIN2DEC(A1),BIN2DEC(A2))) 
+1

धन्यवाद! अन्य उपयोगकर्ताओं के लिए, DEC2BIN का उपयोग करने के लिए टूल्स -> Addins -> विश्लेषण टूलपैक पर जाएं। वीबीए करने के लिए टूल्स -> मैक्रोज़ -> विजुअल बेसिक एडिटर –

+0

दिन में थोड़ा देर हो चुकी है, लेकिन संदर्भ के लिए, वीबीए के बिटवाई ऑपरेटर गैर-अभिन्न प्रकारों को भी संभाल सकते हैं (परिणाम की व्याख्या करें) –

0

= 1- (ए 1 <> 0) + (ए 2 <> 0) प्रत्येक बिट के लिए।

आप का उपयोग करके उपरोक्त सूत्र के लिए अलग-अलग स्तंभों में विभाजित कर सकते हैं इस: = मध्य (A1 | 7 | 1) = मध्य (A1 | 6 | 1) = मध्य (A1 | 5 | 1) = मध्य (A1 | 4 | 1) = मध्य (A1 | 3 | 1) = मध्य (A1 | 2 | 1) = मध्य (A1 | 1 | 1) ...

+0

हालांकि आप प्रत्येक बिट हिस्से के लिए कैसे करते हैं? प्रत्येक बिट के लिए –

+0

= 1- (ए 1 <> 0) + (ए 2 <> 0)। मुझे इसे अब काम करने के लिए थोड़ा सा संशोधित करना था = INT (ISODD ((ए 1 <> 0) + (ए 2 <> 0)) इसमें सेल के लिए 1 या 0 के साथ काम करता है, इसलिए आपको जो कुछ भी काम कर रहा है उसे विभाजित करना है, जैसे = मध्य (ए 1,8,1) ... जैसे उसने कहा – daniel

4

आप VBA के साथ ऐसा कर सकते हैं: शायद नहीं सबसे अच्छा कार्यान्वयन

Public Function XOR_binary(b1, b2) As String 
    Dim len_b1 
    Dim len_b2 
    Dim len_diff 
    Dim i 
    Dim bit1 
    Dim bit2 

    ' see if the two string are the same length. If not, add 0's to 
    ' the beginning of the shorter string 

    len_b1 = Len(b1) 
    len_b2 = Len(b2) 
    len_diff = len_b1 - len_b2 

    Select Case len_diff 
     Case Is < 0 
      ' b2 is longer 
      b1 = String(Abs(len_diff), "0") & b1 
     Case Is = 0 
      ' they're the same length 
     Case Is > 0 
      ' b1 is longer 
      b2 = String(len_diff, "0") & b2 
    End Select 

    XOR_binary = "" 

    For i = Len(b2) To 1 Step -1 
     bit1 = CInt(Mid(b1, i, 1)) 
     bit2 = CInt(Mid(b2, i, 1)) 

     XOR_binary = CInt(bit1 Xor bit2) & XOR_binary 
    Next i 

End Function 

, लेकिन यह काम करता है।

अपने उदाहरण का उपयोग करना, A3 शामिल हैं:

=XOR_Binary(A1,A2) 

जिसके परिणामस्वरूप स्ट्रिंग सबसे लंबे समय तक स्ट्रिंग आप में पास के रूप में बिट्स की एक ही नंबर होगा

0

'इस VBA एक डबल कि हो गया है देता है। वर्कशीट पर स्वरूपित।

Option Explicit 
Public Function MYXOR(r1 As Range, r2 As Range) As Double 
'r1 and r2 are expected as HEX; for example, 
'DEC2HEX(CODE("B")) returns ASCII of "B" as HEX 
On Error GoTo ErrHandler 
    MYXOR = "&H" & r1.Value Xor "&H" & r2.Value 
    GoTo CleanUp 
ErrHandler: 
    MYXOR = Err.Number 
    Resume CleanUp 
CleanUp: 
' format the double being returned in MYXOR with TEXT(DEC2HEX(MYXOR(C9,F9)),"00000") 
' number of leading zeroes according to the size of the HEX in r1 and r2 
End Function 
3

यहाँ VBA का उपयोग किए बिना एक समाधान है:
=TEXT(SUMPRODUCT(MOD(INT(MID(A1,{1,2,3,4,5,6,7},1))+INT(MID(A2,{1,2,3,4,5,6,7},1)),2),{1000000,100000,10000,1000,100,10,1}),"0000000")

यह बिटवाइज़ XOR यह बिट्स की एक स्ट्रिंग में बदलने के लिए SUMPRODUCT और TEXT का उपयोग कर की गणना करता है।

नोट: इस सूत्र दोनों इनपुट मानों की आवश्यकता लंबाई 7 (अपने स्वयं के उदाहरण के अनुसार) है और उत्पादन भी लंबाई 7. होगा विभिन्न इनपुट लंबाई के लिए अनुमति देने के लिए, बस आवश्यक काट-छांट और/या गद्दी को लागू ।


आप कुछ आशुलिपि परिभाषाओं का उपयोग करने के लिए चुन सकते हैं:

  • परिभाषित BitPositions={1,2,3,4,5,6,7} के रूप में (7-बिट),
  • परिभाषित BitStrings रूप ={1000000,100000,10000,1000,100,10,1} (7-बिट),
  • परिभाषित BitFormat="0000000" (7-बिट),

फिर अपने सूत्र में थोड़ा और अधिक सुपाठ्य बनाया जा सकता है/छोटी/क्लीनर:
=TEXT(SUMPRODUCT(MOD(INT(MID(A1,BitPositions,1))+INT(MID(A2,BitPositions,1)),2),BitStrings),BitFormat)

यह भी आसान बिट्स की बड़ी तार, जैसे के साथ काम करने में आता है:

  • =ROW(INDIRECT("1:32")) के रूप में परिभाषित BitPositions (32-बिट),
  • परिभाषित BitStrings=10^(32-ROW(INDIRECT("1:32"))) के रूप में (32-बिट),
  • BitFormat=REPT("0",32) के रूप में (32-बिट को परिभाषित)

क्या आप NOT/OR/AND/आदि लागू करना चाहते हैं। तो आप इन formulas for the decimal counterparts से अपनी प्रेरणा प्राप्त कर सकते हैं; XORSUMPRODUCT के साथ यहां भी दशमलव इनपुट का उपयोग करता है।

संबंधित मुद्दे