Страницы: 1
RSS
Сложение 2х двоичных ячеек по модулю 2
 
Добрый день !  
 
Подскажите, как в Excel по-XOR-ить 2 ячейки, где записаны числа в двоичном виде побитово в третью ячейку ?  
 
т.е. есть ячейка "00001011" и ячейка "00000110", чтоб в результате в третей было "00001101"
 
Не уверен, что верно понял, что значит "побитово"... Но посмотрите файл. Может подойдет. (Результат выделен рамкой.)
 
{quote}{login=genyaa}{date=06.11.2007 09:26}{thema=}{post}Не уверен, что верно понял, что значит "побитово"... Но посмотрите файл. Может подойдет. (Результат выделен рамкой.){/post}{/quote}  
 
Огромное спасибо. Результат такой.  
"побитово", т.е. числа заданы в двоичном виде 8-разрядно, и операция XOR применяется именно между соответствующими разрядами.  
 
А можно как-то сделать так, чтоб небыло этих дополнительных ячеек ? ну чтоб была какая-то формула общая в 3ей ячейке, которая сама все сделает.  
 
Я вот нашел в интернете такое описание, но не пойму, что с этим делать  
 
Defining number of bits  
These function operate on a fixed number of bits. Depending on the number of bits desired, use Insert/Name/Define to define the constant Bits something like:  
 
8-bits        =2^(8-ROW(INDIRECT("1:8")))  
 
x XOR y:  
Result bit is 1 if x-bit is 1 or y-bit is 1, but not if both are 1.  
 
=SUMPRODUCT(MOD(MOD(INT(x/Bits),2)+MOD(INT(y/Bits),2),2),Bits)  
x:      00001101    (decimal 13)  
y:      00000111    (decimal 7)  
       --------  
result: 00001010    (decimal 10)
 
Честно говоря, я запостил недоделанный вариант... поторопился. Проверил работоспособность идеи и запостил... а не доделал. Вот тут доделанный. Вроде работает.
 
А здесь я добавил результат адоптации найденного Вами на другом сайте решения к русским функциям. Я только добавил преобразование десятичных чисел в двоичные и обратно.
 
{quote}{login=genyaa}{date=06.11.2007 11:11}{thema=}{post}А здесь я добавил результат адоптации найденного Вами на другом сайте решения к русским функциям. Я только добавил преобразование десятичных чисел в двоичные и обратно.{/post}{/quote}  
 
genyaa, огромное спасибо ! но я не очень понимаю ,как все это вообще работает.  
Можно какой-то словесный комментарий ?  
 
Я взял Ваш файл, все на ячейках А1 и А2 работает замечательно.  
Решил сделать тоже самое на других ячейках, скопировал функцию, поменял в ней А1 и А2 на другие ячейки ,что использую, но оно не работает %) ...
 
{quote}{login=genyaa}{date=06.11.2007 11:11}{thema=}{post}А здесь я добавил результат адоптации найденного Вами на другом сайте решения к русским функциям. Я только добавил преобразование десятичных чисел в двоичные и обратно.{/post}{/quote}  
Ой... оказалось без файла... вот файл.
 
{quote}{login=Михаил}{date=07.11.2007 10:20}{thema=Re: }{post}genyaa, огромное спасибо ! но я не очень понимаю ,как все это вообще работает.  
Можно какой-то словесный комментарий ?{/post}{/quote}  
 
Моя формула основана на создании двух массивов (с помощью функций СМЕЩ и СТОЛБЕЦ), значения элементов которых равны значениям каждого соответствующего разряда двоичных чисел (записанных десятичными фактически), находящихся в А1 и А2. Два массива сравниваются между собой поэлементно (по принципу формулы массива) так, чтобы результат сравнения был 1 при неравенстве и 0 при равенстве соответствующих элементов. На основе получающегося массива результатов сравнения формируется десятичное число, равное сумме произведений каждого его элемента на 10 в степени номера позиции этого элемента с конца массива (т.е. в степени разрядности соответствующей цифры результата). А чтобы заглавные нули не отсекались, к результату добавляется еще 10 в степени разрядности разультата плюс 1. Далее полученное число преобразуется в текст и заглавная единица отбрасывается с помощью функции ПРАВСИМВ.  
 
{quote}{post}Я взял Ваш файл, все на ячейках А1 и А2 работает замечательно.  
Решил сделать тоже самое на других ячейках, скопировал функцию, поменял в ней А1 и А2 на другие ячейки ,что использую, но оно не работает %) ...{/post}{/quote}  
 
Нужно просто быть внимательным и немного понимать суть ее решения. Формула большая и любая ошибка в ее редактировании приведет к ее сбою.
 
{quote}{login=Михаил}{date=06.11.2007 04:02}{thema=Сложение 2х двоичных ячеек по модулю 2}{post}Подскажите, как в Excel по-XOR-ить 2 ячейки, где записаны числа в двоичном виде побитово в третью ячейку ?  
{/post}{/quote}  
Кстати, если изначально числа десятичные, то возможно удобнее написать мелкую VBA-функцию:  
==  
Function BitwiseXOR(num1 As Long, num2 As Long) As Long  
 BitwiseXOR = num1 Xor num2  
End Function  
==
 
{quote}{login=andy1618}{date=07.11.2007 01:14}{thema=Re: Сложение 2х двоичных ячеек по модулю 2}{post}удобнее написать мелкую VBA-функцию:  
{/post}{/quote}  
:-) Это точно!
 
{quote}{login=}{date=07.11.2007 01:38}{thema=Re: Re: Сложение 2х двоичных ячеек по модулю 2}{post}{quote}{login=andy1618}{date=07.11.2007 01:14}{thema=Re: Сложение 2х двоичных ячеек по модулю 2}{post}удобнее написать мелкую VBA-функцию:  
{/post}{/quote}  
:-) Это точно!{/post}{/quote}  
 
С функцией пробовал. Есть проблема с ней, которая состоит в том, что эти двоичные числа ни что иное, как коды ASCII, которые получаются не только из чисел, но и из букв, символов и т.д. Иногда XOR-иться код не десятичного числа, а какой-то буквы  
 
Все вышенаписанное попытаюсь обобщить и сделать у себя все верно.  
Огромное всем спасибо. Буду решать задачу дальше
 
Что-то не получается у меня :(  
Есть начальные ячейки С5 и С6.  
С5 и С6 - это результат выполнения функции =ШЕСТН.В.ДВ(C4;8) и еще одной =ШЕСТН.В.ДВ  
Числовой формат обоих ячеек - текстовый  
 
Не получается в С7 получить верный XOR :(  
 
Может у меня формат какой-то не тот данных стоит ?
 
Если изначально числа шестнадцатиричные, то можно немного доработать функцию:  
==  
Function BitwiseXOR_Hex2Dec(hex1 As String, hex2 As String) As Long  
BitwiseXOR_Hex2Dec = CLng("&H" + hex1) Xor CLng("&H" + hex2)  
End Function  
==  
 
Либо можно прямо в Hex-е выводить:  
==  
Function BitwiseXOR_Hex2Hex(hex1 As String, hex2 As String) As String  
BitwiseXOR_Hex2Hex = Hex(CLng("&H" + hex1) Xor CLng("&H" + hex2))  
End Function  
==
 
ВСЕ ! Всем спасибо, заработало !  
 
из кучи решений остановил выбор на вырианте    
=ДЕС.В.ДВ(СУММПРОИЗВ(ОСТАТ(ОСТАТ(ЦЕЛОЕ(ДВ.В.ДЕС(E5)/Bits);2)+ОСТАТ(ЦЕЛОЕ(ДВ.В.ДЕС(E6)/Bits);2);2);Bits);ДЛСТР(E5))  
 
 
Но возникла новая проблема.  
В моих таблицах используется функция =ГПР  
Все, что я делал ранее, свелось к верному получению двоичных кодов. Эти коды по сути - коды ASCII клавиатурных символов. Есть табличка кодов ASCII - код-значение, код-значение и т.д.  
 
ГПР я использую, чтобы полученное предварительными рассчетами XOR-значение найти в таблице кодов ASCII и вернуть значение этого кода.  
 
В чем ошибка. Буквы большие и малые функция возвращает верно, а вот цифры и символы нет. В чем дело ?  
Функция ГПР же возвращает значение ячейки, она ничего не вычисляет %)  
 
Подскажите пожалуйста
 
Вот еще раз сделал.  
 
Буквы по таблице находит отлично.  
Если цифры должны получаться - пишет "####" - ошибка "значение недоступно"
 
{quote}{login=Михаил}{date=08.11.2007 02:44}{thema=}{post}Вот еще раз сделал.  
 
Буквы по таблице находит отлично.  
Если цифры должны получаться - пишет "####" - ошибка "значение недоступно"{/post}{/quote}  
 
А пример в файле показать можно?
 
Можно. Вот пробные рассчеты.  
В ячейках C8 D8 E8 он должен выдавать цыфры 1 2 3 соответственно.  
Как видно ,результат XOR верный.  
Он должен найти этот результат в таблице ASCII и подставить значения 1 2 3.
 
{quote}{login=Михаил}{date=08.11.2007 02:39}{thema=Re: }{post}ГПР я использую, чтобы полученное предварительными рассчетами XOR-значение найти в таблице кодов ASCII и вернуть значение этого кода.  
{/post}{/quote}  
 
Хм, а что мешает напрямую по коду символа вычислять сам символ функцией CHAR()? (в русской версии, наверное, это функция "СИМВОЛ")
 
Посмотрел файл - у меня он не работает (функции типа ШЕСТН.В.ДВ глючат при переходе между русским и английским офисами), но не суть.  
Попробуйте у ГПР последним аргументом добавить FALSE (ЛОЖЬ).  
И ещё мелкий момент - в формулах в ячейках C8, D8, ... ссылку на массив лучше указывать с долларами. Пример:  
"=ГПР(C7;$B$17:$CR$18;2;ЛОЖЬ)" - тогда такую формулу можно безболезненно растягивать по горизонтали, ссылки на массив не уедут (подозреваю, что вам пришлось их подправлять вручную для каждой ячейки).
 
{quote}{login=andy1618}{date=08.11.2007 03:50}{thema=Re: Re: }{post}{quote}{login=Михаил}{date=08.11.2007 02:39}{thema=Re: }{post}ГПР я использую, чтобы полученное предварительными рассчетами XOR-значение найти в таблице кодов ASCII и вернуть значение этого кода.  
{/post}{/quote}  
 
Хм, а что мешает напрямую по коду символа вычислять сам символ функцией CHAR()? (в русской версии, наверное, это функция "СИМВОЛ"){/post}{/quote}  
 
 
Спасибо за идею. Мешало отсутствие знаний, т.к. Excel я никогда не использовал для таких задач. Уже реализовал, вроде работает
 
{quote}{login=andy1618}{date=08.11.2007 04:00}{thema=}{post}Посмотрел файл - у меня он не работает (функции типа ШЕСТН.В.ДВ глючат при переходе между русским и английским офисами), но не суть.  
Попробуйте у ГПР последним аргументом добавить FALSE (ЛОЖЬ).  
И ещё мелкий момент - в формулах в ячейках C8, D8, ... ссылку на массив лучше указывать с долларами. Пример:  
"=ГПР(C7;$B$17:$CR$18;2;ЛОЖЬ)" - тогда такую формулу можно безболезненно растягивать по горизонтали, ссылки на массив не уедут (подозреваю, что вам пришлось их подправлять вручную для каждой ячейки).{/post}{/quote}  
 
 
Огромное спасибо ! после добавления "FALSE" все заработало !  
 
Попробую привести теперь все это в вид поприличнее.  
 
Если кому интересно вдруг, то эта табличка позволяет дешифровывать пароли оборудования Cisco Systems. По ячейкам можно просмотреть весь алгорит шифрования от и до.
 
Подскажите пожалуйста как посчитать сумму по модулю 2? как составить именно таблицу истинности в Excel
 
{quote}{login=Kemper}{date=27.09.2010 10:09}{thema=}{post}Подскажите пожалуйста как посчитать сумму по модулю 2? как составить именно таблицу истинности в Excel{/post}{/quote}  
 
Что Вы имеете ввиду?
Страницы: 1
Читают тему
Наверх