No Excel, preciso gerar uma tabela com todas as combinações de 1 e 0 para 12 espaços.
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
e assim por diante, obtendo todas as combinações como
0 1 0 1 0 1 0 1 0 1 0 1
Como posso fazer isso?
microsoft-excel
Pablo Durbin Sprake Martínez
fonte
fonte
Respostas:
Como 2 ^ 12 = 4096, você precisa de 4096 células (12 para seus 12 bits).
Em princípio, você coloca em A1 para A4096 este comando:
Isso seria, mas funciona apenas para 0 ... 511 (9 bits). Então, aplicamos um truque: dividimos o número em uma parte de 3 bits e 9 bits e calculamos as duas strings separadamente, depois as concatenamos.
Por isso você tem:
Editar: Eu não estava ciente do argumento do número opcional de dígitos. Usá-lo dará essa função:
Coloque isso nas células A1 para A4096.
Editar 2: De acordo com o comentário de Lưu Vĩnh Phúc, é possível que o OP tenha 12 colunas com um dígito binário cada. Neste caso, coloque
em todas as células A1 para eu 4096
fonte
Basta copiar e colar a seguinte fórmula dentro
A1
:Em seguida, arraste-o para
L4096
.A fórmula extrai o enésimo bit de um número (n & gt; = 0): o número é inteiro dividido por 2 ^ n e, em seguida, calcula o módulo 2.
fonte
Primeiro, insira a seguinte função definida pelo usuário em um módulo padrão:
Isso retorna uma string de 36 "bits". Então em A1 entrar:
e copie para baixo A4096
Em B1 entrar:
e copie para baixo B4096 :
Funções Definidas pelo Usuário (UDFs) são muito fáceis de instalar e usar:
Se você salvar a pasta de trabalho, a UDF será salva com ela. Se você estiver usando uma versão do Excel posterior a 2003, deverá salvar o arquivo como .xlsm em vez de .xlsx
Para remover o UDF:
Para usar o UDF do Excel:
Para aprender mais sobre macros em geral, veja:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
e
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
e para detalhes sobre UDFs, consulte:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
As macros devem estar habilitadas para que isso funcione!
fonte
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
em vez de uma referência de célula. Em um arquivo com macros está tudo bem, mas em um sem isso cria um popup irritante e assustador.Coloque a seguinte fórmula em cada célula de A a L, para todas as linhas de 1 a 4096
Se você quiser a coisa toda em uma string com espaços como o que você pediu, coloque isso na última coluna
e arraste todo o caminho até A4096: L4096
Para uma solução geral, coloque o número de bits em alguma célula, como Z1, ou célula nomeada como
NumOfBits
e use a seguinte fórmulaVersão otimizada:
Explicação:
Se escrevermos todas as representações binárias em linhas de cima para baixo, o ciclo de inversão / alternância do enésimo bit (contando a partir do lsb) é 2 n . Em cada ciclo a primeira metade (de 0 a 2 n-1 -1) será 0 e a última metade será 1. Por exemplo, o lsb (primeiro bit da direita) alternará a cada 2 1-1 = 1 bit, o segundo bit alternará a cada 2 2-1 = 2 bits ...
Como resultado, vamos usar o módulo 2 n para obter a posição atual do número no ciclo, se for menor que 2 n-1 é um bit zero, senão é um.
fonte
Outra maneira que usei:
A1
paraL1
com zerosA2
escrever=1-A1
B2
escrever=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
fórmula paraC2:L2
A2:L2
fórmulas para linhas3:4096
Isso produz todas as cadeias binárias em ordem, com bits menos significativos na primeira coluna. A última linha (4096) é todas.
Isso não depende
ROW()
(para que possa ser movido livremente), você pode aumentar o comprimento diretamente, e é fácil generalizá-lo para cadeias não binárias. Também funciona com o LibreOffice Calc.fonte
Como o que você está procurando é um número binário de 12 dígitos, sua melhor opção é usar a função "DEC2BIN" em cada número de 0 a 4095 (2 ^ 12-1). Infelizmente, o DEC2BIN só funciona com até 8 dígitos, então a fórmula final parece um pouco complicada, porque da concatenação:
O DEC2BIN usa o número para converter e o número de dígitos que você deseja gerar. Combinei 4 e 8 para obter 12. Para deslocar os primeiros 4 dígitos até o valor mais alto, divido por 256 (2 ^ 8) e arredondar para baixo para ignorar os outros dígitos do valor mais baixo. Para os dígitos de valor mais baixo, subtraia esse valor para que eles continuem contando depois de 255.
Pesquise por decimal para conversão binária e mudança de bit para entender como isso funciona.
fonte
ROUNDDOWN(A1/256,0)
você pode simplesmente usarQUOTIENT(A1, 256)
ou melhor aindaBITRSHIFT(A1, 8)
. A última parte também pode ser substituída porBITAND
ouMOD
Uma resposta que cria os dados fora do excel, mas cria um .csv que pode ser aberto para obter a tabela no excel.
Isso usa python, mas pode ser feito em uma linguagem shell também. Basta executá-lo em cmd.exe se o python estiver instalado.
Isso cria um arquivo (binary.csv) que contém o conteúdo desejado, cada dígito em células separadas como (eu acho) é desejado da questão.
explicação:
fonte
print
A palavra-chave é chamada como uma função - dessa forma, ela será compatível com o Python 2.3+ e o Python 3.0.0+