В Excel мне нужно создать таблицу со всеми комбинациями 1 и 0 для 12 пробелов.
1 1 1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 1 1 1
0 0 1 1 1 1 1 1 1 1 1 1
0 0 0 1 1 1 1 1 1 1 1 1
и так далее и тому подобное, получая все комбинации, такие как
0 1 0 1 0 1 0 1 0 1 0 1
Как я могу это сделать?
microsoft-excel
Пабло Дурбин Спраке Мартинес
источник
источник
Ответы:
Поскольку 2 ^ 12 = 4096, вам нужно 4096 ячеек (12 для ваших 12 бит).
В принципе, вы вводите в A1 до A4096 эту команду:
Это было бы так, но это работает только для 0 ... 511 (9 бит). Таким образом, мы применяем хитрость: мы разбиваем число на 3-битную и 9-битную части и вычисляем две строки отдельно, а затем объединяем их.
Следовательно, у вас есть:
Изменить: я не знал о дополнительном аргументе число цифр. Используя это даст эту функцию:
Поместите это в ячейки А1-А4096.
Редактировать 2: В соответствии с комментарием Лю Vĩnh Phúc, возможно, что ОП хотел 12 столбцов с одной двоичной цифрой в каждом. В этом случае положить
во все ячейки от А1 до L 4096.
источник
Просто скопируйте и вставьте следующую формулу внутрь
A1
:Затем перетащите-заполните до
L4096
.Формула извлекает n-й бит числа (n> = 0): число целое, деленное на 2 ^ n, затем вычисляется модуль 2.
источник
Сначала введите следующую пользовательскую функцию в стандартный модуль:
Это возвращает строку из 36 "битов". Затем в A1 введите:
и скопировать через A4096
В B1 введите:
и скопировать через B4096 :
Пользовательские функции (UDF) очень просты в установке и использовании:
Если вы сохраните книгу, UDF будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx
Чтобы удалить UDF:
Чтобы использовать UDF из Excel:
Чтобы узнать больше о макросах в целом, смотрите:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
и
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
а подробности о UDF смотрите в:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Макросы должны быть включены, чтобы это работало!
источник
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
вместо ячейки ссылка. В файле с макросами это нормально, но в одном без него создается раздражающее и страшно выглядящее всплывающее окно.Другой способ, который я использовал:
A1
дляL1
нулейA2
записи=1-A1
B2
записи=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
формулу вC2:L2
A2:L2
формулы строк в строки3:4096
Это производит все двоичные строки по порядку, с младшими битами в первом столбце. Последний ряд (4096) это все единицы.
Это не зависит
ROW()
(так что его можно свободно перемещать), вы можете увеличить длину напрямую, и просто обобщить на недвоичные строки. Это также работает с LibreOffice Calc.источник
Поместите следующую формулу в каждую ячейку от A до L, для всех строк от 1 до 4096
Если вы хотите, чтобы все было в строке с пробелами, похожими на те, что вы просили, поместите это в последний столбец
Затем перетащите строки до M4096
Для более общего решения, поместите число битов в какую-либо ячейку, например Z1, или в именованную ячейку
NumOfBits
и используйте следующую формулуЕго также можно легко изменить, чтобы использовать любую ячейку в качестве начальной, изменив смещение строки и столбца.
Оптимизированная версия с использованием побитовых операций вместо степеней:
Самый быстрый способ:
Это формула массива, которая намного быстрее вычисляется и создает файл намного меньшего размера
Объяснение:
Если мы запишем все двоичные представления в строках сверху вниз, цикл переключения / переключения 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 , это нулевой бит, иначе он равен единице.
источник
Поскольку вы ищете каждое 12-значное двоичное число, лучше всего использовать функцию «DEC2BIN» для каждого числа от 0 до 4095 (2 ^ 12-1). К сожалению, DEC2BIN работает только до 8 цифр, поэтому окончательная формула выглядит немного сложнее из-за конкатенации:
DEC2BIN принимает число для преобразования и количество цифр, которые вы хотите вывести. Я сложил 4 и 8, чтобы получить 12. Чтобы сдвинуть первые 4 цифры до максимального значения, я делю на 256 (2 ^ 8) и округляю вниз, чтобы игнорировать другие младшие цифры. Для цифр с более низким значением вычтите это значение, чтобы они продолжали считать после 255.
Ищите десятичное в двоичное преобразование и сдвиг бит, чтобы понять, как это работает.
источник
ROUNDDOWN(A1/256,0)
тебя можно просто использоватьQUOTIENT(A1, 256)
или даже лучшеBITRSHIFT(A1, 8)
. Последняя часть также может быть замененаBITAND
илиMOD
Ответ, который создает данные за пределами Excel, но создает .csv, который можно открыть, чтобы получить таблицу в Excel.
Это использует Python, но может быть сделано и на языке оболочки. Просто запустите его в cmd.exe, если установлен Python.
Это создает файл (binary.csv), который содержит желаемое содержимое, каждая цифра в отдельных ячейках, как (я думаю) желательно из вопроса.
объяснение:
источник
print
ключевое слово называлось как функция - таким образом, оно будет совместимо с Python 2.3+ и Python 3.0.0+