En Excel, necesito generar una tabla con todas las combinaciones de 1 y 0 para 12 espacios.
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
y así sucesivamente, obteniendo todas las combinaciones como
0 1 0 1 0 1 0 1 0 1 0 1
¿Cómo puedo hacer esto?
microsoft-excel
Pablo Durbin Sprake Martínez
fuente
fuente
Respuestas:
Porque 2 ^ 12 = 4096, necesita 4096 celdas (12 para sus 12 bits).
En principio, pones en A1 a A4096 este comando:
Eso sería todo, pero solo funciona para 0 ... 511 (9 bits). Entonces aplicamos un truco: dividimos el número en una parte de 3 bits y una de 9 bits y calculamos las dos cadenas por separado, luego las concatenamos.
Por lo tanto tienes:
Editar: no estaba al tanto del argumento opcional de número de dígitos. Usarlo le dará esta función:
Ponga esto en las celdas A1 a A4096.
Edición 2: Según el comentario de Lưu Vĩnh Phúc, es posible que el OP quisiera 12 columnas con un dígito binario cada una. En este caso, pon
en todas las celdas A1 a L 4096.
fuente
Simplemente copie y pegue la siguiente fórmula dentro
A1
:Luego arrastre y llene hasta
L4096
.La fórmula extrae el enésimo bit de un número (n> = 0): el número es entero dividido por 2 ^ n, luego calcula el módulo 2.
fuente
Primero ingrese la siguiente función definida por el usuario en un módulo estándar:
Esto devuelve una cadena de 36 "bits". Luego en A1 ingrese:
y copiar a través de A4096
En B1 ingrese:
y copie a través de B4096 :
Las funciones definidas por el usuario (UDF) son muy fáciles de instalar y usar:
Si guarda el libro, el UDF se guardará con él. Si está utilizando una versión de Excel más tarde que 2003, debe guardar el archivo como .xlsm en lugar de .xlsx
Para eliminar el UDF:
Para usar el UDF de Excel:
Para obtener más información sobre las macros en general, consulte:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
y
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
y para detalles sobre UDF, ver:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
¡Las macros deben estar habilitadas para que esto funcione!
fuente
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
lugar de una celda referencia. En un archivo con macros está bien, pero en uno sin él crea una ventana emergente irritante y aterradora.Otra forma que he usado:
A1
aL1
con cerosA2
escritura=1-A1
B2
escritura=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
fórmula aC2:L2
A2:L2
fórmulas de fila a filas3:4096
Esto produce todas las cadenas binarias en orden, con bits menos significativos en la primera columna. La última fila (4096) son todas.
Esto no depende
ROW()
(por lo que puede moverse libremente), puede aumentar la longitud directamente y es sencillo generalizar a cadenas no binarias. También funciona con LibreOffice Calc.fuente
Ponga la siguiente fórmula en cada celda de A a L, para todas las filas del 1 al 4096
Si quieres todo en una cadena con espacios como lo que pediste, pon esto en la última columna
Luego arrastre las filas hasta el final hasta M4096
Para una solución más general, coloque el número de bits en alguna celda, como Z1, o una celda con nombre
NumOfBits
y use la siguiente fórmulaTambién se puede modificar fácilmente para usar cualquier celda como celda inicial cambiando el desplazamiento de fila y columna
Versión optimizada que utiliza operaciones bit a bit en lugar de potencias:
La manera mas rapida:
Es una fórmula de matriz que es mucho más rápida de calcular y producir un archivo mucho más pequeño
Explicación:
Si escribimos todas las representaciones binarias en filas de arriba a abajo, el ciclo de alternar / alternar el enésimo bit (contando desde lsb) es 2 n . En cada ciclo, la primera mitad (de 0 a 2 n-1 -1) será 0 y la última mitad será 1. Por ejemplo, lsb (primer bit desde la derecha) alternará cada 2 1-1 = 1 bit, el segundo bit se alternará cada 2 2-1 = 2 bits ...
Como resultado, tomaremos el módulo 2 n para obtener la posición actual del número en el ciclo, si es menor que 2 n-1 es un bit cero, de lo contrario es uno.
fuente
Como lo que está buscando es cada número binario de 12 dígitos, su mejor opción es utilizar la función "DEC2BIN" en cada número del 0 al 4095 (2 ^ 12-1). Desafortunadamente, DEC2BIN solo funciona hasta 8 dígitos, por lo que la fórmula final parece un poco complicada debido a la concatenación:
DEC2BIN toma el número para convertir y el número de dígitos que desea generar. Combiné 4 y 8 para obtener 12. Para desplazar los primeros 4 dígitos hasta el valor más alto, divido por 256 (2 ^ 8) y redondeo hacia abajo para ignorar los otros dígitos de menor valor. Para los dígitos de menor valor, reste este valor para que continúen contando más allá de 255.
Busque la conversión de decimal a binario y el desplazamiento de bits para comprender cómo funciona esto.
fuente
ROUNDDOWN(A1/256,0)
solo puedes usarQUOTIENT(A1, 256)
, o incluso mejorBITRSHIFT(A1, 8)
. La última parte también se puede reemplazar conBITAND
oMOD
Una respuesta que crea los datos fuera de Excel, pero crea un .csv que se puede abrir para obtener la tabla en Excel.
Esto usa python, pero también se puede hacer en un lenguaje de shell. Simplemente ejecútelo en cmd.exe si Python está instalado.
Esto crea un archivo (binary.csv) que contiene el contenido deseado, cada dígito en celdas separadas como (creo) se desea de la pregunta.
explicación:
fuente
print
palabra clave se llame como una función, de esa manera será compatible con Python 2.3+ y Python 3.0.0+