EXCEL XOR bits multiples
Bon j'ai deux cellules avec une chaîne de bits 0111010 et 0101011. Je veux XOR les deux ensemble, de sorte que la cellule serait 0010001.
Je sais que vous pouvez l'utiliser pour les valeurs booléennes
=OR(AND(A1,NOT(A2)),AND(A2,NOT(A1)))
mais il ne fonctionne pas pour une chaîne de bits.
source d'informationauteur James Van Boxtel
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'utiliser VBA pour ce faire. Si vous ouvrez VBA, créez un nouveau Module et entrez la fonction
Vous pouvez ensuite utiliser la DEC2BIN et BIN2DEC pour convertir du binaire en décimal pour exécuter cette fonction. Par exemple:
La Cellule A1 = 0111010
La Cellule A2 = 0101011
Vous pouvez faire cela avec VBA:
Probablement pas la meilleure mise en œuvre, mais il fonctionne.
À l'aide de votre exemple,
A3
contient:La chaîne résultante aura le même nombre de bits que la chaîne la plus longue que vous transmettez.
Voici une solution sans l'aide de 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")
Ce calcule le bit à bit
XOR
à l'aide deSUMPRODUCT
etTEXT
pour la transformer en une chaîne de bits.Remarque: cette formule nécessite à la fois des valeurs d'entrée pour avoir la longueur 7 (comme par votre propre exemple) et la sortie aussi ont une longueur de 7. Pour permettre l'entrée différentes longueurs, il suffit de mettre en œuvre les dispositions de la troncature et/ou de rembourrage.
Vous pouvez choisir d'utiliser une abréviation définitions:
BitPositions
comme={1,2,3,4,5,6,7}
(7 bits),BitStrings
comme={1000000,100000,10000,1000,100,10,1}
(7 bits),BitFormat
comme="0000000"
(7 bits),ensuite votre formule peut être fait un peu plus lisible/court/nettoyeur:
=TEXT(SUMPRODUCT(MOD(INT(MID(A1,BitPositions,1))+INT(MID(A2,BitPositions,1)),2),BitStrings),BitFormat)
Cela rend également plus facile de travailler avec les plus grandes chaînes de bits, par exemple:
BitPositions
comme=ROW(INDIRECT("1:32"))
(32 bits),BitStrings
comme=10^(32-ROW(INDIRECT("1:32")))
(32 bits),BitFormat
comme=REPT("0",32)
(32 bits)Si vous souhaitez mettre en œuvre
NOT
/OR
/AND
/etc. ensuite, vous pouvez obtenir votre inspiration à partir de ces les formules pour le décimal homologues; voici quelques explications plus approfondies pourXOR
avecSUMPRODUCT
bien qu'il utilise la virgule entrées.=1-(A1<>0)+(A2<>0) pour chaque bit.
Vous pouvez le diviser en colonnes individuelles pour la formule ci-dessus en utilisant ceci:
=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)
...
"ce VBA renvoie un double qui doit être formatée sur la feuille de calcul.