Dans Excel, je dois générer un tableau avec toutes les combinaisons de 1 et 0 pour 12 espaces.
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
et ainsi de suite et ainsi de suite, obtenir toutes les combinaisons telles que
0 1 0 1 0 1 0 1 0 1 0 1
Comment puis-je faire ceci?
microsoft-excel
Pablo Durbin Sprake Martínez
la source
la source
Réponses:
Parce que 2 ^ 12 = 4096, vous avez besoin de 4096 cellules (12 pour vos 12 bits).
En principe, vous mettez dans A1 à A4096 cette commande:
Ce serait ça, mais cela ne fonctionne que pour 0 ... 511 (9 bits). Nous appliquons donc une astuce: nous divisons le nombre en une partie de 3 bits et une partie de 9 bits et calculons les deux chaînes séparément, puis les concaténons.
Vous avez donc:
Edit: je n'étais pas au courant de l'argument optionnel du nombre de chiffres. Son utilisation donnera cette fonction:
Mettez-le dans les cellules A1 à A4096.
Edit 2: Selon le commentaire de Lưu Vĩnh Phúc, il est possible que l'OP ait voulu 12 colonnes avec un chiffre binaire chacune. Dans ce cas, mettez
dans toutes les cellules A1 à L 4096.
la source
Copiez-collez simplement la formule suivante à l'intérieur
A1
:Faites ensuite glisser-remplir vers
L4096
.La formule extrait le nième bit d'un nombre (n> = 0): le nombre est un entier divisé par 2 ^ n, puis calcule le module 2.
la source
Saisissez d'abord la fonction définie par l'utilisateur suivante dans un module standard:
Cela renvoie une chaîne de 36 "bits". Puis dans A1 entrez:
et copier à travers A4096
Dans B1 entrez:
et copiez-le via B4096 :
Les fonctions définies par l'utilisateur (UDF) sont très faciles à installer et à utiliser:
Si vous enregistrez le classeur, l'UDF sera enregistré avec. Si vous utilisez une version d'Excel postérieure à 2003, vous devez enregistrer le fichier sous .xlsm plutôt que .xlsx
Pour supprimer l'UDF:
Pour utiliser l'UDF à partir d'Excel:
Pour en savoir plus sur les macros en général, voir:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
et
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
et pour plus de détails sur les FDU, voir:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
Les macros doivent être activées pour que cela fonctionne!
la source
=RIGHT(bigbinary(ROW()-1),12)
?ROW() - 1
place d'une cellule référence. Dans un fichier avec des macros, c'est bien, mais dans un fichier sans, il crée une fenêtre contextuelle irritante et effrayante.Une autre façon que j'ai utilisée:
A1
àL1
avec des zérosA2
écriture=1-A1
B2
écriture=IF( AND( A1=1, A2=0), 1-B1, B1)
B2
formule dansC2:L2
A2:L2
formules de ligne dans des lignes3:4096
Cela produit toutes les chaînes binaires dans l'ordre, avec les bits les moins significatifs sur la première colonne. La dernière ligne (4096) est tout entière.
Cela ne dépend pas
ROW()
(donc il peut être déplacé librement), vous pouvez augmenter directement la longueur, et il est simple de généraliser aux chaînes non binaires. Il fonctionne également avec LibreOffice Calc.la source
Mettez la formule suivante dans chaque cellule de A à L, pour toutes les lignes de 1 à 4096
Si vous voulez le tout dans une chaîne avec des espaces comme ce que vous avez demandé, mettez cela dans la dernière colonne
Faites ensuite glisser les rangées jusqu'au M4096
Pour une solution plus générale, mettez le nombre de bits dans une cellule, comme Z1, ou une cellule nommée comme
NumOfBits
et utilisez la formule suivanteIl peut également être facilement modifié pour utiliser n'importe quelle cellule comme cellule de départ en modifiant le décalage de ligne et de colonne
Version optimisée utilisant des opérations au niveau du bit au lieu des pouvoirs:
La façon la plus rapide:
C'est une formule matricielle qui est beaucoup plus rapide à calculer et à produire un fichier beaucoup plus petit
Explication:
Si nous écrivons toutes les représentations binaires dans des lignes de haut en bas, le cycle de basculement / basculement du nième bit (en comptant à partir du lsb) est de 2 n . Dans chaque cycle, la première moitié (de 0 à 2 n-1 -1) sera 0 et la dernière moitié sera 1. Par exemple, le lsb (premier bit de droite) alternera tous les 2 1-1 = 1 bit, le deuxième bit bascule tous les 2 2-1 = 2 bits ...
En conséquence, nous prendrons modulo 2 n pour obtenir la position actuelle du nombre dans le cycle, s'il est inférieur à 2 n-1, c'est un bit zéro, sinon c'est un.
la source
Puisque ce que vous recherchez est chaque nombre binaire à 12 chiffres, votre meilleur pari est d'utiliser la fonction "DEC2BIN" sur chaque nombre de 0 à 4095 (2 ^ 12-1). Malheureusement, DEC2BIN ne fonctionne que jusqu'à 8 chiffres, donc la formule finale semble un peu délicate à cause de la concaténation:
DEC2BIN prend le nombre à convertir et le nombre de chiffres que vous souhaitez sortir. J'ai combiné 4 et 8 pour obtenir 12. Pour décaler les 4 premiers chiffres jusqu'à la valeur la plus élevée, je les divise par 256 (2 ^ 8) et arrondis pour ignorer les autres chiffres de valeur inférieure. Pour les chiffres de valeur inférieure, soustrayez cette valeur afin qu'ils continuent à compter au-delà de 255.
Recherchez la conversion décimale en binaire et le décalage binaire pour comprendre comment cela fonctionne.
la source
ROUNDDOWN(A1/256,0)
vous pouvez simplement utiliserQUOTIENT(A1, 256)
, ou mieux encoreBITRSHIFT(A1, 8)
. Cette dernière partie peut également être remplacée parBITAND
ouMOD
Une réponse qui crée les données en dehors d'Excel, mais crée un .csv qui peut être ouvert pour obtenir la table dans Excel.
Cela utilise python, mais pourrait aussi être fait dans un langage shell. Il suffit de l'exécuter dans cmd.exe si python est installé.
Cela crée un fichier (binary.csv) qui contient le contenu souhaité, chaque chiffre dans des cellules séparées comme (je pense) est souhaité à partir de la question.
explication:
la source
print
mot-clé soit appelé comme une fonction - de cette façon, il sera compatible avec Python 2.3+ et Python 3.0.0+