español ejemplos and excel xor

and - ejemplos de xor en excel



EXCEL XOR múltiples bits (5)

De acuerdo, tengo dos celdas con una cadena de bits 0111010 y 0101011. Quiero unir XOR los dos juntos para que la celda resultante sea 0010001.

Sé que puedes usar esto para valores booleanos

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

pero no funciona para una cadena de bits.


= 1- (A1 <> 0) + (A2 <> 0) para cada bit.

Puede dividirlo en columnas individuales para la fórmula anterior usando esto: = MID (A1 | 7 | 1) = MID (A1 | 6 | 1) = MID (A1 | 5 | 1) = MID (A1 | 4 | 1) = MID (A1 | 3 | 1) = MID (A1 | 2 | 1) = MID (A1 | 1 | 1) ...


Necesita usar VBA para hacer esto. Si abre VBA, cree un nuevo Módulo e ingrese la función

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

A continuación, puede usar DEC2BIN y BIN2DEC para convertir de binario a decimal para ejecutar esta función. Por ejemplo:

Celda A1 = 0111010

Celda A2 = 0101011

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


Puedes hacer esto con 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

Probablemente no sea la mejor implementación, pero funciona.

Usando su ejemplo, A3 contiene:

=XOR_Binary(A1,A2)

La cadena resultante tendrá la misma cantidad de bits que la cadena más larga que ingrese.


''este VBA devuelve un doble que debe formatearse en la hoja de trabajo.

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


Aquí hay una solución sin usar 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")

Esto calcula el XOR bit a bit utilizando SUMPRODUCT y TEXT para convertirlo en una cadena de bits.

Nota: esta fórmula requiere que ambos valores de entrada tengan una longitud de 7 (según su propio ejemplo) y la salida también tendrá una longitud de 7. Para permitir diferentes longitudes de entrada, simplemente implemente el truncamiento y / o relleno necesarios.

Puedes elegir usar algunas definiciones abreviadas:

  • definir BitPositions como ={1,2,3,4,5,6,7} (7-bit),
  • define BitStrings como ={1000000,100000,10000,1000,100,10,1} (7-bit),
  • definir BitFormat como ="0000000" (7-bit),

entonces tu fórmula se puede hacer un poco más legible / más corta / más limpia:
=TEXT(SUMPRODUCT(MOD(INT(MID(A1,BitPositions,1))+INT(MID(A2,BitPositions,1)),2),BitStrings),BitFormat)

Esto también hace que sea más fácil trabajar con cadenas de bits más grandes, por ejemplo:

  • definir BitPositions como =ROW(INDIRECT("1:32")) (32 bits),
  • define BitStrings como =10^(32-ROW(INDIRECT("1:32"))) (32-bit),
  • define BitFormat como =REPT("0",32) (32 bits)

Si desea implementar NOT / OR / AND / etc. entonces puede obtener su inspiración de estas fórmulas para las contrapartes decimales ; Aquí hay algunas explicaciones más profundas para XOR con SUMPRODUCT aunque también utiliza entradas decimales.