Страницы: 1
RSS
Сумматор двоичных чисел
 
Здравствуйте!

Есть 2 натуральных числа, записанных в 2ной системе счисления, ну, например 100101(2) и 101110001011(2). Для каждого бита отдельная ячейка. Числа записаны друг под другом. Надо их просуммировать в 2ной системе счисления.

Я прекрасно знаю алгоритм нахождения суммы, но не могу понять, как это записать в терминах Excel.
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (перенос разряда)

Здесь ведь нужен некий буфер (для запоминания переносимой 1 - отдельная ячейка икселя) для хранения переносимого разряда + постоянно он участвует в расчетах.
Я уже голову сломал, как это записать в Excel. И через остаток что-то думал, и через вспомогательные вычисления и пр. пр.

Лично для меня главная проблема в том, что не знаю, как записать в "ЕСЛИ" обращение к двум ячейкам одновременно, например, в блоке TRUE.

Подскажите, как такое реализуется в Excel.
Спс за внимание.

P.S. Использовать встроенные функции перевода, аля дв.в.дес и пр. запрещено, нужен как бы сумматор собственный простейший
Изменено: Иванов Иван - 03.03.2021 13:47:57
 
Покажите в файле
 
вот, заготовка
 
Цитата
Иванов Иван написал:
проблема в том, что не знаю, как записать в "ЕСЛИ" обращение к двум ячейкам одновременно, например, в блоке TRUE
Обратиться-то можно. Вопрос, что под этим подразумевается и что хотите получить и где...Без файла сейчас в теме будет больше флуда, чем полезных советов.
Как вариант: использовать вложенную И: =ЕСЛИ(И(A1=""'A2="";...
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,вот, давайте я максимально упрощу таким примером:

Вот пример простейшего псевдокода:
Если (а = 5), то
Код
{
  b = 10
  c = 20
}

вот такую конструкцию, как записать в Excel??
a = A1, b = B2, c = C3
Код
= ЕСЛИ(A1 = 5; B2 = 10????
 
Цитата
Иванов Иван написал:
пример простейшего псевдокода
хм...Ну я все равно не очень понял, если честно. Пример приложенной таблицы мало что прояснил. Возможно, решение формулами будет выглядеть иначе. Можете в приложенном примере показать на паре строк(вбив руками): вот это исходные данные, а вот это надо получить? Там, думаю, всем будет понятнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Можете в приложенном примере показать на паре строк(вбив руками): вот это исходные данные, а вот это надо получить? Там, думаю, всем будет понятнее.
поддерживаю)  
Не бойтесь совершенства. Вам его не достичь.
 
может так?
Код
Sub qwertí()
Dim m, i, j, s
m = [g7..o9].Value
For i = UBound(m, 2) To 1 Step -1
    s = m(1, i) + m(2, i) + j
    j = IIf(s > 1, 1, 0)
    m(3, i) = s Mod 2
Next i
[g7..o9] = m
End Sub
 
это элементарнейшее побитовое сложение (школьная программа информатики). Аналогия: для вас, как спецов, сложность этой операции равносильна понимаю функцию "ЕСЛИ"
в 1ом посте расписал таблицу бинарной арифметики для бит. складываются числа побитово справа налево и нужно записать средствами Excel.

ну, я попробую показать в обновленном документе, что должно получиться, но человек, который мало-мальски знает, что такое сумматор, для него все очевидно сразу)
специально выделил складываемые биты различным цветом (на примере первых трех колонок)
 
Цитата
Иванов Иван написал:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10 (перенос разряда)
вот это вот не подтверждается в таблице...Отсюда и вопросы, что надо в итоге. По сути, если только на описание опираться, то формула простая(записывается в G9 и распространяется на остальные ячейки):
Код
=ЕСЛИ(СУММ(G7:G8)>1;10;СУММ(G7:G8))
но я так и не понял какой нужен итоговый результат: то ли все это объединить во что-то вроде "0110010110", то ли не надо... И зачем буфер...
Изменено: Дмитрий(The_Prist) Щербаков - 03.03.2021 14:43:32
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
макрос не подошел?
 
Цитата
Иванов Иван написал:
человек, который мало-мальски знает, что такое сумматор
похоже тут один такой человек, но и он не знает что с этим делать
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Дмитрий(The_Prist) Щербаков,все бы ничего, но одна ячейка предназначена для хранения ОДНОГО бита. В случае, когда сумма > 1 (вместе с буфером), то происходит перенос в более старший разряд. В этом-то вся и проблема.

Кстати, я этот сумматор элементарно закодирую, хоть на Си, хоть на С++, хоть на VBA, а вот средствами Excel не понимаю
 
И мой вариант.
Двоичные числа внесены в B1:I2.
Вспомогательная строка 4 с формулой:
Код
=СТЕПЕНЬ(2;СТОЛБЕЦ($I$1)-СТОЛБЕЦ())

Сумма двоичных чисел находится по формуле:
Код
=ЦЕЛОЕ((СУММ(($B$2:$I$2+$B$1:$I$1)*СТЕПЕНЬ(2;СТОЛБЕЦ($I$1)-СТОЛБЕЦ($B$1:$I$1)))-СУММПРОИЗВ($A$4:A4;$A$5:A5))/B4)

Внести в B5 как формулу массива и протянуть до I5.
В A5 внести 0.
 
Ну вот вроде без доп.столбцов и на храдкоре :)
Код
=ЕСЛИ((СУММ(G7:G8)+ЕСЛИ(ИЛИ(СУММ(H7:H8)=2;СУММ(I7:I8)=2);1;0))>1;0;СУММ(G7:G8)+ЕСЛИ(ИЛИ(СУММ(H7:H8)=2;СУММ(I7:I8)=2);1;0))
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх