Поставте наступну формулу в кожну клітинку від А до L для всіх рядків від 1 до 4096
=IF(MOD(ROW() - 1, 2^(13 - COLUMN())) < 2^(12 - COLUMN()), 0, 1)
Якщо ви хочете, щоб вся справа була в рядку з пробілами на зразок того, що ви запитували, покладіть це в останню колонку
=A1 & " " & B1 & " " & C1 & " " & D1 & " " & E1 & " " & F1 & " " & G1 & " " & H1 & " " & I1 & " " & J1 & " " & K1 & " " & L1
Потім перетягуйте рядки до кінця M4096
Для більш загального рішення покладіть кількість бітів у якусь комірку, наприклад Z1, або названу клітинку типу NumOfBits
та використовуйте наступну формулу
=IF(MOD(ROW() - 1, 2^(NumOfBits + 1 - COLUMN())) < 2^(NumOfBits - COLUMN()), 0, 1)
Він також може бути легко модифікований для використання будь-якої комірки як вихідної комірки шляхом зміни зміщення рядків і стовпців
Оптимізована версія з використанням побітових операцій замість повноважень:
=IF(BITAND(ROW() - 1, BITLSHIFT(1, 13 - COLUMN()) - 1) < BITLSHIFT(1, 12 - COLUMN()), 0, 1)
=IF(BITAND(ROW() - 1, BITLSHIFT(1, NumOfBits + 1 - COLUMN()) - 1) < BITLSHIFT(1, NumOfBits - COLUMN()), 0, 1)
Найшвидший спосіб:
- Скопіюйте будь-яку з наведених формул
- Натисніть F5(або Ctrl+ G) і введіть A1: L4096, щоб вибрати весь діапазон
- Натисніть, F2а потім Ctrl+, Vщоб вставити
- Натисніть Ctrl+ Shift+ Enter. Бум. Ви закінчили. Не потрібно тягнути
Це формула масиву, яка набагато швидше обчислити і створити набагато менший файл
Пояснення:
Якщо ми запишемо всі бінарні уявлення рядками зверху вниз, цикл перегортання / перемикання n-го біта (рахуючи від lsb) становить 2 n . У кожному циклі перша половина (від 0 до 2 n-1 -1) буде 0, а остання половина - 1. Наприклад, lsb (перший біт справа) буде чергуватися кожні 2 1-1 = 1 біт, другий біт буде перемикати кожні 2 2-1 = 2 біта ...
В результаті ми візьмемо модуль 2 n, щоб отримати поточне положення числа в циклі, якщо воно менше 2 n-1 - це нульовий біт, інакше - одиничне.