Вот решение без использования 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)
Это также облегчает работу с большими строками битов, например:
- определяют
BitPositions
в =ROW(INDIRECT("1:32"))
(32-битный),
- определяет
BitStrings
, как =10^(32-ROW(INDIRECT("1:32")))
(32-битный),
- определяет
BitFormat
как =REPT("0",32)
(32 бит)
Если вы желаете осуществить NOT
/OR
/AND
/etc. то вы можете получить вдохновение от этих formulas for the decimal counterparts; здесь some more in-depth explanations для XOR
с SUMPRODUCT
, хотя он также использует десятичные входы.
Спасибо! Для других пользователей, чтобы использовать DEC2BIN, перейдите в Инструменты -> Аддины -> Инструментарий анализа. Чтобы сделать VBA, перейдите в Инструменты -> Макросы -> Редактор Visual Basic –
Немного поздно, но для справки, побитовые операторы VBA также могут обрабатывать нецелые типы (интерпретировать результат так, как вы это сделаете) –