Поместите следующую формулу в каждую ячейку от A до 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. Boom. Вы сделали Не надо таскать
Это формула массива, которая намного быстрее вычисляется и создает файл намного меньшего размера
Объяснение:
Если мы запишем все двоичные представления в строках сверху вниз, цикл переключения / переключения 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 , это нулевой бит, иначе он равен единице.